Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Clase18

409 views

Published on

Manejo de errores. Errores de léxico, de sintáxis y semánticos. Errores de lógica. Errores en tiempo de ejecución. El objeto Err (VBScript). Políticas de error. Errores de cadenas de caracteres.

Published in: Education
  • Be the first to comment

  • Be the first to like this

Clase18

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

×