viernes, 22 de agosto de 2008

Más sobre errores

Run-Time Errors: Errores en Tiempo de Ejecución

Run-Time Errors, aquellos errores imprevistos que ocurren durante la ejecución de una aplicación, por ejemplo si el usuario olvido insertar el medio de almacenamiento en la unidad lectora o si selecciona una entrada de archivo inválida.

Es posible prevenir estos errores en tiempo de ejecución a través de manejadores de errores que atrapan o interceptan errores y pueden corregir el problema, esperar una respuesta por parte del usuario que solucione el error o almacenar los datos antes de terminar la aplicación, los errores que pueden ser controlados son llamados Trappable Errors y le proceso de interceptar o atrapar un error se conoce como error trapping.

Manejador de Error (error handler) es una rutina para atrapar y responder a errores en la aplicación. Se recomienda agregar un manejador de errores a cualquier procedimiento donde se pueda anticipar la posibilidad de un error en tiempo de ejecución.

Cuando una aplicación ocurre desde el ambiente de desarrollo Visual Basic muestra un mensaje que permite entrar en modo de búsqueda de errores (Debug) o terminar la aplicación.

Si un error ocurre en tiempo de ejecución cuando la aplicación está corriendo como un archivo ejecutable Visual Basic muestra un mensaje de error y termina la aplicación.

El proceso de diseñar un manejador de errores involucra 3 pasos:

  1. Establecer o habilitar un error trap (proceso de atrapar un error) indicando a la aplicación donde bifucar cuando ocurra un error.

    Visual Basic habilita un error trap cuando ejecuta la sentencia On Error, el error trap permanece habilitado mientras el procedimiento contenido está activo. Sólo un error trap a la vez puede ser habilitado en cualquier procedimiento, por lo que un error trap debe residir en el procedimiento local, no es posible utilizar la sentencia On Error para bifurcar hacia otro procedimiento.

    Para deshabilitar un error trap utilice la sentencia On Error GoTo 0.

  2. Escribir una rutina de manejo de errores que responda a todos los errores anticipadamente.

    El primer paso en la escritura de una rutina de manejo de errores es agregar una etiqueta para marcar el principio del manejo de errores. La etiqueta deberia tener un nombre descriptivo y seguida de un dos puntos (:).

    Una convención es colocar el código de manejo de errores al final del procedimiento con una sentencia Exit Sub o Exit Function inmediatamente antes de la etiqueta, esto permite al procedimiento eliminar la ejecución del manejo de errores si no ocurren errores.

  3. Salir de la rutina de manejo de errores.

    es posible salir de una rutina de manejo de errores utilizando la sentencia Resume o Resume Next, la sentencia Resume podría ejecutar la línea de código que causa el error, mientras que la sentencia Resume Next podría ejecutar la línea de código siguiente a la línea de código que causa el error.

    Por lo general se podría utilizar Resume en cualquier momento que el manejador de errores pueda corregir el error y Resume Next cuando el manejador de errores no puede corregir el error.

  • Resume, regresa a la sentencia que causo el error, utilice esta sentencia para repetir una operación después de corregir el error.
  • Resume Next, regresa a la sentencia siguiente de una que causo el error.
  • Resume línea o etiqueta, regresa a una línea o número de línea especifica.

La sentencia On Error Resume Next causa que los errores sean ignorados, si un error ocurre en tiempo de ejecución, el proceso continua con la línea siguiente.

La sentencia On Error GoTo 0 deshabilita el error trap.

   Sub nombreProcedimiento()
On Error GoTo miManejadorDeErrores
'instrucciones
Exit Sub
miManejadorDeErrores:
'instrucciones
REsume[0]/Resume Next/Resume linea/Err.Raise:=número
End Sub

Objeto Err

El objeto Err contiene información acerca del error ocurrido, este objeto tiene propiedades y métodos que pueden utilizarse para checar que error ocurrio, para limpiar el valor del error o para causar un error.

Propiedades del Objeto Err

  • Number, entero que indica el último error ocurrido, en algunos casos el manejador de errores puede ser habilitado para corregir un error y continuar con el proceso sin interrumpir al usuario o notificar al usuario de un error y entonces tomar una acción basada en la respuesta del usuario.
  • Description, string que contiene una descripción del error ocurrido.
  • Source, contiene el nombre de la aplicación que genero el error.

El objeto Err tiene 3 propiedades adicionales.

  Private Sub abrirArchivo_Click()
On Error GoTo miManejadorErr
Open "c:\archivoInexistente.txt" For Input As #1
End
miManejadorErr:
Dim strErr
strErr = strErr & "Description : " & Err.Description & Chr(13)
strErr = strErr & "HelpContext : " & Err.HelpContext & Chr(13)
strErr = strErr & "Number : " & Err.Number & Chr(13)
strErr = strErr & "Source : " & Err.Source & Chr(13)
MsgBox strErr
Resume Next
End Sub

Métodos del Objeto Err

  • Clear, limpia un error cuando se establece el valor de Err.Number con 0, utilice este método cuando se manejen errores inline
  • Raise, causa un error, utilice este método para pasar un error de regreso al procedimiento que lo invoco. Si se requiere generar y atrapar errores propios, comience el esquema de numeración con 32767 y trabaje los números de forma descendente: Err.Raise 23000

Un manejador de errores Inline no contiene etiquetas o sentencias Resume.

Manejo de Errores Inline

Es posible escribir manejadores de errores Inline en vez de bifurcar al manejador de errores establecido, para ello:

  1. Incluir en el código la sentencia On Error Resume Next
  2. Evaluar el valor Err.Number después de cada sentencia que pueda generar un error
  3. Utilizar el método Err.Clear restablecer el número de error

Error Trapping

Existen 3 procesos generales para interceptar o atrapar un error:

  1. Break on All Errors, si se establece esta opción Visual Basic ignora cualquier sentencia On Error y continua en break mode si ocurre cualquier error en tiempo de ejecución. Esta opción es utilizada para buscar errores mientras se ejecuta la aplicación dentro del ambiente de desarrollo Visual Basic.
  2. Break in Class Module, si se establece esta opción cuando se busca un error en un proyecto ActiveX Component, causa que el componente ActiveX continue en Break mode antes que pasar el error de regreso a la aplicación cliente.
  3. Break on Unhandled Errors, cuando se establece esta opción, Visual Basic continua en Break mode sobre cualquier error que no tenga un manejador de error especifico.

Para establecer alguno de los procesos anteriores seleccione:

Del menún principal Options » General Tab » seleccionar uno de los procesos Error Trapping

0 comentarios: