Clase18

406 views
380 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
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
406
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

×