Está en la página 1de 3

4.5 Gestión de excepciones: manejo de excepciones, lanzamiento de excepciones.

Manejo de excepciones
Una excepción es cualquier incidente que no permite la terminación correcta de un
programa. Puede ser inducida o involuntaria.
En la mayoría de los casos se tratará de impedir la terminación de los programas manejando
las excepciones o lanzándolas hacia algún punto del programa que pueda manejar dicha
excepción. El manejo de excepciones es una técnica de programación que permite al
programador controlar los errores ocasionados durante la ejecución de un programa
informático. Cuando ocurre cierto tipo de error, el sistema reacciona ejecutando un
fragmento de código que resuelve la situación, por ejemplo, retornando un mensaje de error
o devolviendo un valor por defecto.
Un manejo de excepción se implementa utilizando la instrucción de bloque Try…Catch…
Finally.
 Bloque try: colocamos el código que podría contener una excepción.
 Bloque catch: en caso de que ocurra una excepción se ejecutará este bloque. Aquí se
puede controlar una excepción, mandar un aviso del suceso o lanzarlo a otro lugar
que pueda capturarlo. Cabe mencionar que puede permitirse varios bloques catch,
para establecer excepciones especificas en cada uno de ellos. En esos casos se inicia
con la excepción más específica hasta finalizar con la más general.
El motor de ejecución empieza a ejecutar el bloque Try. Cuando se lanza una excepción, el
motor de ejecución examina la pila de llamadas, una lista de las llamadas de función
creadas por el programa que se está ejecutando actualmente. Esta ruta de ejecución puede
tener varias funciones. Por ejemplo, si Main() invoca FirstMethod() y ese método invoca
SecondMethod() y ese método invoca ThirdMethod(), todos éstos están en la pila de
invocaciones.
La excepción asciende por la pila de invocaciones a cada bloque de excepciones que los
abarca. Debido a que la pila no es modificada, cada bloque de excepción recibe la
oportunidad de manejar la excepción. Si la excepción puede ser resuelta por una de las
instrucciones Catch, ejecuta la instrucción de manejo. Si la excepción no concuerda con
ninguna de las instrucciones Catch en el bloque de excepción, la pila está nuevamente sin
modificación y la excepción se presenta al siguiente método. Si la excepción recorre todo el
camino hacia el inicio del programa (por ejemplo, a Main ()) y no ha sido manejada, el
motor de ejecución muestra un cuadro de diálogo que declara que ha ocurrido una
excepción no manejada.
El desenrollado de pila sólo va en una dirección. Debido a que la pila no está dañada, se
destruyen los objetos. Una vez que se maneja la excepción, el programa continúa después
del bloque Try de la instrucción Catch que manejó la excepción. Si el bloque Try ha sido
ejecutado sin haber lanzado una excepción, o un bloque Catch (un manejador de
excepciones) ha sido ejecutado, se ejecuta el bloque Finally correspondiente al bloque Try
o Catch que acaba de terminar. Este bloque normalmente se limpia después del algoritmo.
Por omisión la sentencia Throw desencadena una colección de finalizaciones de métodos,
comenzando por el método que ejecuta la sentencia Throw y acabando en el método main
del programa, dando lugar a la conclusión del programa en sí.
La captura de una Exception significa romper la cascada de lanzamiento de Exception que
da lugar a la terminación del programa. En este caso, el método que captura la Exception
recupera el control y entonces puede – se espera – manejar la situación de una forma menos
extrema que una abrupta terminación del programa.
Sintaxis
Try
[ tryStatements ]
[ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
[ catchStatements ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ finallyStatements ] ]
End Try
Donde solo es obligatorio el Try y el End Try. El resto se puede ignorar, pero como buena
práctica, incluya la parte Finally, incluso si se deja en blanco.
Lanzamiento de excepciones
Cuando se ha establecido que una parte del código puede presentar una excepción ya sea
por los límites del propio lenguaje o porque se ha decidido que bajo circunstancias
establecidas se presente una interrupción, se habla de que se realiza un lanzamiento de una
excepción. Esto se realiza cuando no es posible controlar la excepción y se desea enviar a
un lugar en el cual pueda ser tratado correctamente.
Algo importante de mencionar es que, si el codificar lanza una excepción, debe estar
preparado para capturarla en algún lugar, ya que de no hacerlo causara una ruptura en el
flujo del programa (lo cual es lo que se quiere evitar).
Con objeto de permitir que los métodos respondan frente a circunstancias inesperadas, .net
proporciona una forma alternativa de finalizar la ejecución del método. Esto se logra
mediante la sentencia Throw (Inicia una excepción dentro de un procedimiento). Puede
utilizar la instrucción Throw para interceptar errores dentro del código, porque Visual Basic
asciende por la pila de llamadas hasta que encuentra el código de control de excepciones
apropiado.
Throw [referencia]
En donde la referencia corresponde a un objeto de alguna subclase de la clase Exception –
una clase que representa situaciones inesperadas. La sentencia throw suele adoptar la forma
siguiente:
Throw New Clase-de-Exception (argumento de tipo String)
En donde Clase-de-Exception es una subclase de Exception.
Un constructor de Exception admite como argumento un String que se imprimirá cuando se
visualice la cadena de invocaciones. Esto permite que quien lance la Exception otorgue un
rótulo a esa Exception con objeto de aportar información adicional.
Por ejemplo: En el siguiente código se utiliza la instrucción Throw para iniciar una
excepción:
 ' Throw  es una nueva excepción.
 Throw New System.Exception("Una excepción ha ocurrido.")

Esto sería el resultado:

Cuando un método ejecuta la sentencia Throw, se dice que lanza una excepción. Se puede
considerar, por ejemplo, la cadena de invocaciones de métodos que da lugar a la invocación
de un método particular. El primer método que se ejecuta es main. Éste invoca a un método
que a su vez invoca a otro método y así sucesivamente hasta llegar al método que se
encuentra con la situación inesperada.
Si se produce una excepción en un método que no esté preparado para controlarla, la
excepción se propagará de vuelta al método de llamada o al método anterior. Si el método
anterior tampoco tiene controlador de excepciones, la excepción se propagará de vuelta al
llamador del método, y así sucesivamente. La búsqueda de un controlador continuará hasta
la pila de llamadas, que es la serie de procedimientos a los que se llama dentro de la
aplicación. Si ésta tampoco encuentra un controlador para la excepción, se mostrará un
mensaje de error y la aplicación finalizará.
El lanzamiento de una Exception da lugar a que el método que se está ejecutando finalice
inmediatamente. Sin embargo, la sentencia throw no proporciona un valor, ni tampoco
quien haya efectuado la llamada reanuda la ejecución desde el punto en que se ha
producido la invocación. Lo que ocurre es que la Exception lanzada va pasando por todas
las invocaciones habidas a lo largo de la cadena, obligando a que todos los métodos
invocados vayan finalizando.

También podría gustarte