Manejo de Errores
21 de Marzo de 2007
Errores de Léxico
Uso de un símbolo no definido
Uso de símbolos que no son del
lenguaje
Ejemplo:
Dima UnStr
UnStr -- “Guatemala”
For i = * To 40j
Errores de Sintáxis
Uso de símbolos en lugares inadecuados
Omisión del símbolo correcto
Ejemplo:
If A < Then
A = 38**B
Else
B = B*4>A
If
Errores Semánticos
Errores en el sentido de la construcción
No tiene sentido
Ejemplo:
Dim A,B
A = “Guatemala”
B = A*8
Errores Lógicos
El programa no corresponde con lo que
se quiere hacer
Produce resultados ilógicos
Ejemplo: Construír una tabla de 2x2 en
cada celda de una de 2x2
Errores Lógicos
Dim i,j
Document.Write "<Table Border=1>"
For i = 1 To 2
Document.Write "<TR>"
For j = 1 To 2
Document.Write "<TD><Table
Border=1>"
Do While i < 2
Document.Write "<TR>"
Do While j < 2
Document.Write
"<TD>&nbsp;</TD>"
j=j+1
Loop
Document.Write "</TR>"
i=i+1
Loop
Document.Write "</Table></TD>"
Next
Document.Write "</TR>"
Next
Document.Write "</Table>"
ej074.html
Errores de Tiempo de Corrida
Ocurren en condiciones específicas durante la
ejecución
No fueron previstos al programar
Detienen la ejecución del programa
Ejemplos:
División entre cero
Indices fuera de límites en vectores
Uso no válido de nulo
Cambio de formatos de fecha
Abrir un archivo inexistente
El Objeto Err
Almacena los datos del último error
Es un objeto
Tiene propiedades o atributos
Tiene comportamiento (métodos)
Propiedades: Number, Source,
Description
Métodos: Clear, Raise
¿De qué sirve el objeto Err?
Si la ejecución se detuvo, ¿cómo
se puede consultar la información
del error?
Flujo en Caso de Errores
Instrucción On Error
Si hay un error:
Si se usa On Error Resume Next
Continúa en la siguiente instrucción
Si se usa On Error Goto 0
El programa se detiene
Se marca error
Si nada se indica
Se asume On Error Goto 0
¿Dónde Ocurre Error?
Dim i,Arr1(8)
Randomize
For i = 0 To 8
Arr1(i) = Round(Rnd()*10,0)
Next
For i = 0 To 8
Arr1(i) = Arr1(i) / Arr1(i+1)
Next
Document.Write "<Table Border=1><TR>"
For i = 0 To 9
Document.Write "<TD>" & Arr1(i) & "</TD>"
Next
Document.Write "</TR></Table>"
On Error Resume Next
Dim i,Arr1(8)
Randomize
For i = 0 To 8
Arr1(i) = Round(Rnd()*10,0)
Next
For i = 0 To 8
On Error Resume Next
Arr1(i) = Arr1(i) / Arr1(i+1)
Next
Document.Write "<Table Border=1><TR>"
For i = 0 To 9
Document.Write "<TD>" & Arr1(i) &
"</TD>"
Next
Document.Write "</TR></Table>"
Dim i,Arr1(8)
Randomize
For i = 0 To 8
Arr1(i) = Round(Rnd()*10,0)
Next
For i = 0 To 8
On Error Resume Next
Arr1(i) = Arr1(i) / Arr1(i+1)
On Error Goto 0
Next
Document.Write "<Table Border=1><TR>"
For i = 0 To 9
Document.Write "<TD>" & Arr1(i) &
"</TD>"
Next
Document.Write "</TR></Table>"
Políticas de Error
No hacer nada
Se atiende el error cuando ocurre
A favor:
Desarrollo más rápido
Código más simple
En contra:
Hay que “parchar” el código
Costos de soporte y mantenimiento
Políticas de Error
Que ocurra “elegantemente”
Mostrar mensaje explicativo del error
Guardarlo en una bitácora
A favor:
Se maneja el error de forma sencilla y
estandarizada
En contra:
Se obliga al usuario a interpretarlo
Mucho código “de cajón”
Ocurre Elegantemente
Dim UnNum,Repetir
Repetir = True
Do While Repetir
UnNum = InputBox("Ingrese un número","Ingreso",0)
On Error Resume Next
Document.Write "El número ingresado es: " & UnNum & _
" que dividido 8 da: " & (UnNum/8)
If Err.Number > 0 Then
MsgBox "Ha ocurrido el error:" & VBNewLine & Err.Number & _
VBNewLine & "de descripción:" & VBNewLine & Err.Description & _
VBNewLine & "de origen:" & VBNewLine & Err.Source,VBCritical,"Error"
Err.Clear
Else
Repetir = False
End If
On Error Goto 0
Loop
ej075.html
Políticas de Error
Que ocurra sin que se note
Suprimir los avisos de error
Poner un On Error Resume Next al inicio
A favor:
Permite ejecutar los programas hasta el
final
En contra:
Errores importantes nunca salen a la luz
Políticas de Error
Cero tolerancia a errores
Prevenir los errores, hacer que no ocurran
Eliminar los errores antes de producción
Si pueden ocurrir anticiparse
Si no pueden anticiparse hacer que:
Falle en seguro (fail safe)
Degradación aceptable (fail soft)
Tolerancia completa (fail operational)
Políticas de Error
Cero tolerancia a errores
A favor:
Exige planificar la codificación
Exige disciplina en la codificación
Reduce costos de soporte y mantenimiento
En contra:
Difícil de implementar
Errores de Strings
Verificar
Cadena vacía
Longitud cero
No nulo
Espacios al inicio y al final
Espacios en el medio
ej076.html
ej077.html
Descargar

Manejo de Errores