Sunteți pe pagina 1din 19

Manejo de Errores

Leonel Morales Daz Ingeniera Simple leonel@ingenieriasimple.com

Copyright 2008 by Leonel Morales Daz Ingeniera Simple. Derechos reservados

Disponible en: http://www.ingenieriasimple.com/introprogra

Errores de Lxico
Uso de un smbolo no definido Uso de smbolos que no son del lenguaje Ejemplo:
Dima UnStr UnStr -- Guatemala For i = * To 40j

Errores de Sintxis
Uso de smbolos en lugares inadecuados Omisin del smbolo correcto Ejemplo:
If A < Then A = 38**B Else B = B*4>A If

Errores Semnticos
Errores en el sentido de la construccin No tiene sentido Ejemplo:
Dim A,B A = Guatemala B = A*8

Errores Lgicos
El programa no corresponde con lo que se quiere hacer Produce resultados ilgicos Ejemplo: Construr una tabla de 2x2 en cada celda de una de 2x2

Errores Lgicos
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 especficas durante la ejecucin No fueron previstos al programar Detienen la ejecucin del programa Ejemplos:
Divisin entre cero Indices fuera de lmites en vectores Uso no vlido 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 (mtodos)

Propiedades: Number, Source, Description Mtodos: Clear, Raise

De qu sirve el objeto Err?


Si la ejecucin se detuvo, cmo se puede consultar la informacin del error?

Flujo en Caso de Errores


Instruccin On Error Si hay un error:
Si se usa On Error Resume Next
Contina en la siguiente instruccin

Si se usa On Error Goto 0


El programa se detiene Se marca error

Si nada se indica
Se asume On Error Goto 0

Dnde 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>"

Polticas de Error
No hacer nada
Se atiende el error cuando ocurre

A favor:
Desarrollo ms rpido Cdigo ms simple

En contra:
Hay que parchar el cdigo Costos de soporte y mantenimiento

Polticas de Error
Que ocurra elegantemente
Mostrar mensaje explicativo del error Guardarlo en una bitcora

A favor:
Se maneja el error de forma sencilla y estandarizada

En contra:
Se obliga al usuario a interpretarlo Mucho cdigo de cajn

Ocurre Elegantemente
Dim UnNum,Repetir Repetir = True Do While Repetir UnNum = InputBox("Ingrese un nmero","Ingreso",0) On Error Resume Next Document.Write "El nmero ingresado es: " & UnNum & _ " que dividido 8 da: " & (UnNum/8) If Err.Number > 0 Then MsgBox "Ha ocurrido el error:" & VBNewLine & Err.Number & _ VBNewLine & "de descripcin:" & 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

Polticas 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

Polticas de Error
Cero tolerancia a errores
Prevenir los errores, hacer que no ocurran Eliminar los errores antes de produccin Si pueden ocurrir anticiparse Si no pueden anticiparse hacer que:
Falle en seguro (fail safe) Degradacin aceptable (fail soft) Tolerancia completa (fail operational)

Polticas de Error
Cero tolerancia a errores A favor:
Exige planificar la codificacin Exige disciplina en la codificacin Reduce costos de soporte y mantenimiento

En contra:
Difcil de implementar

Errores de Strings
Verificar
Cadena vaca
Longitud cero

No nulo Espacios al inicio y al final Espacios en el medio


ej076.html ej077.html

S-ar putea să vă placă și