Excepciones

 

 

 

  Control Estructurado de errores

 

  Provocar excepciones

 

  Ejemplos con NET

 

 

Volver a página principal

 

 

Excepciones

 

En este artículo aprenderemos a utilizar el control estructurado de errores que nos ofrece VB.NET que, a diferencia de VB, permite estructurar mediante las instrucciones  Try, Catch, Finally y End Try.  Los programadores de Delphi encontraran muchas similitudes con la nueva estructura de NET y  los usuarios de VB 6 o de anteriores versiones, encontrarán mucho más útil y organizada la "captura" de errores estructurada en substitución de los anteriores "On error goto".

Los programas suelen fallar por múltiples razones, desde una entrada incorrecta de datos por parte del usuario hasta la realización de un cálculo erróneo, como por ejemplo una división por cero o error por desbordamiento al multiplicar valores muy grandes, accesos a tablas en uso o inactivas...etc.  El descuido de estas excepciones provocarán, en tiempo de ejecución, que la aplicación deje de funcionar en el momento en que ocurra algún error no contemplado por el programador. ¿Debemos entonces prevenir a todo el código de estos errores? No hace falta. Sólo tenemos que que añadir un controlador estructurado de excepción donde realicemos operaciones que puedan provocar errores ya que una buena parte del código no generará excepciones.

Veamos la estructura de error :

 

Try
   'Código que puede provocar el error
Catch
   'Código de control del error
Finally
   'Código de liberación
End Try

 

Las instrucciones mínimas necesarias para crear un control de errores son Try y End Try. Las instrucciones Catch y Finally no son obligatorias pero las utilizaremos para advertir al usuario mediante mensajes o modificar valores para evitar el error y como mínimo utilizaremos una de ellas dentro de la estructura.

Utilizaremos Catch  para advertir al usuario del error que se ha producido o intentar, dependiendo de cada excepción, cambiar un valor o reintentar una acción. Hay que tener en cuenta que existen muchísimos tipos de excepciones y que no existe un procedimiento genérico para controlarlas a todas. La forma, advertencia o método de control la veremos según el tipo de función que estemos haciendo y de su importancia. También debo añadir que podemos utilizar varias instrucciones Catch, dentro de un mismo bloque de control estructurado, para controlar más de un error específico.  

En resumen, cuando se produce una excepción dentro del Try el programa pasa a ejecutar  el código que tenemos en Catch dejando de lado las instrucciones que se encuentren por debajo de la línea que haya causado el error dentro del Try.  Veamos un ejemplo : Creamos un pequeño código con una estructura Try/Catch  y programamos  una división por cero. Al producirse el error se deja de ejecutar el código del bloque Try para ejecutar las sentencias que hemos escrito dentro de Catch por lo tanto, no se ejecutarán todas las líneas inferiores a la excepción.

 

 

 

 

 

Dim a As Integer = 0
Dim b As Integer = 0
Dim c As Integer = 0

Try
   a = b \ c

 

 

   Console.WriteLine("Aquí no llegaré")
Catch exc As Exception
   Console.WriteLine("Error división por cero")
End Try

      

 

NOTA : en algunos ejemplos utilizaré la consola de NET para mostrar los resultados. De esta forma no hará falta crear ningún formulario ni msgbox's para ver si la aplicación funciona como debería. La ventana de la consola se encuentra en "modo ejecución" en la parte inferior derecha dentro del la pestaña "output".

 

Provocar excepciones

Seguramente encontraremos lugares dónde veremos claramente que el usuario puede provocar un error al asignar, por ejemplo, una edad de 250 años a una persona. En este caso el programa no detectaría ningún error de tipo ya que el valor "250" es un entero correcto (supongamos que el campo consta como entero). Para estos casos, NET nos permite provocar excepciones "personalizadas" según las normas o reglas que queramos utilizar para el control de los datos. Para crear excepciones  tendremos que utilizar la instrucción Throw seguida  del nombre de la excepción.

Veamos un ejemplo global de como provocar y gestionar una excepción utilizando la clase gato del tema anterior . Ampliaremos la clase gato añadiendo una excepción PesoErroneo en substitución del MsgBox que nos mostraba el mensaje "Peso Erroneo".

 

 

Property Peso() As Integer

  Get

       Return tpeso

  End Get

  Set(ByVal Value As Integer)

     If Value > 100 And Value < 10000 Then

        tpeso = Value

     Else

       Dim PesoErroneo As New ArgumentException()

       Throw PesoErroneo

     End If

  End Set

End Property

 

 

Vamos a probar nuestra propia excepción.  En el formulario principal añadiremos el siguiente código :

 

 

 

Try

    Gato1.Peso = 2000

    MsgBox("Ahora el gato pesa " & Gato1.Peso)

    Gato1.Peso =11000

    'Aquí no llegará el código

    Catch PesoErroneo As ArgumentException

       MsgBox("Error en el peso")

End Try

 

 

Podemos comprobar como la primera asignación a la propiedad peso no crea ninguna excepción. No pasará lo mismo al intentar asignar el valor de 11000 ya que está fuera del  rango que hemos programado en la clase. La Clase provoca la excepción  PesoErroneo y esta es gestionada dentro de nuestro bloque de control de errores. De la misma forma en la que hemos capturado nuestra excepción también podríamos añadir otro Catch para gestionar otro error.

Throw también nos permite crear excepciones sin tener que crear una nueva instancia pero debemos tener en cuenta, que al provocarla de esta forma, podemos tener problemas dentro del Catch para reconocer el tipo de error que estamos gestionando.

  

 

Throw New Exception("Se ha producido un error")

 

 

Volver a Título▲            ◄Índice principal►             Timeless web site    

 

Este sitio se actualizó por última vez el 27 de diciembre de 2004