Está en la página 1de 4

La interceptación y el tratamiento de excepciones son tareas estándar de programación.

En este artículo se explica cómo utilizar un bloque try-catch-finally para interceptar una excepción.
Un bloque try-catch-finally es un contenedor que se pone alrededor del código donde es posible
que se produzca una excepción.

Un bloque try-catch-finally consta de las secciones siguientes:


Todo el código que puede iniciar una excepción se pone dentro del bloque try.
Si se inicia una excepción se entra en el bloque catch y el programa puede realizar la operación
apropiada de recuperación o avisar al usuario.
El código del bloque finally se ejecuta siempre y puede realizar una limpieza después de
producirse una excepción. El bloque finally es opcional.

Cómo interceptar excepciones en Visual Basic .NET

Cree una nueva aplicación de consola en Visual Basic .NET.


En el procedimiento Sub Main(), inserte el ejemplo de código siguiente. En el ejemplo se declara e
inicializa tres variables, donde la inicialización de "k" produce un error:

' Este código genera una excepción.


Console.WriteLine("Vamos a dividir 10 entre 0 y ver lo que ocurre...")
Console.WriteLine()

Dim i as Integer = 10
Dim j as Integer = 0
Dim k As Integer k = i/j ' Error en esta línea.
Presione la tecla F5 para ver la excepción.
Ponga una instrucción try-catch alrededor del código para capturar el error. El código siguiente
intercepta todos los errores iniciados en el código y muestra un mensaje de error genérico.
Reemplace el código del procedimiento Sub Main() por el código siguiente:

' Este código muestra cómo interceptar una excepción.


Try
Console.WriteLine("Vamos a dividir 10 entre 0 y ver lo que ocurre...")
Console.WriteLine()

Dim i as Integer = 10
Dim j as Integer = 0
Dim k As Integer k = i/j ' Error en esta línea. El control pasa al bloque catch.
Catch
Console.WriteLine("Error.")
End Try
Presione CTRL+F5 para ejecutar el proyecto. Observe que aparecerá el mensaje de error del
bloque catch.
Si es preciso realizar alguna tarea de limpieza o postproceso independientemente de que se
produzca o no un error, utilice la parte finally de la instrucción try-catch-finally. El código de la
parte finally de la instrucción se ejecuta siempre, independientemente de que haya o no una
excepción. En la consola aparecerá el código siguiente, "Esta instrucción se imprime siempre",
aunque no aparezca ningún error. Reemplace el código de Sub Main() por el código siguiente:

' Este código muestra cómo interceptar una excepción.


Try
Console.WriteLine("Vamos a dividir 10 entre 0 y ver lo que ocurre...")
Console.WriteLine()

Dim i as Integer = 10
Dim j as Integer = 0
Dim k As Integer k = i/j ' Error en esta línea. El control pasa al bloque catch.

Catch
Console.WriteLine("Error.")
Finally ' Esta sección se ejecuta independientemente del proceso anterior.
Console.WriteLine()
Console.WriteLine("Esta instrucción se imprime siempre")
End Try
Presione CTRL+F5 para ejecutar el proyecto.
Puede utilizar el objeto de excepción con la instrucción catch para recuperar detalles acerca de la
excepción. Una excepción tiene varias propiedades que pueden ayudarle a identificar información
de ayuda, origen o incluso pila acerca de una excepción. Esta información puede ser muy útil para
hacer un seguimiento de la causa original de la excepción o para proporcionar una explicación
mejor de su origen. El ejemplo siguiente intercepta una excepción y muestra un mensaje de error
específico. Como antes, puede reemplazar el código del procedimiento Sub Main() por el código
siguiente:

Ejemplo 1:
' Este código muestra cómo interceptar una excepción.
Try
Console.WriteLine("Vamos a dividir 10 entre 0 y ver lo que ocurre...")
Console.WriteLine()

Dim i as Integer = 10
Dim j as Integer = 0
Dim k As Integer k = i/j ' Error en esta línea. El control pasa al bloque catch.

Catch e As Exception ' Ejecuta código que trata la excepción


' o informa al usuario de lo que ha ocurrido.
Console.WriteLine("Error:")
Console.WriteLine(e.ToString()) ' Muestra el mensaje de error al usuario.

Finally ' Esta sección se ejecuta independientemente del proceso anterior.


Console.WriteLine()
Console.WriteLine("Esta instrucción se imprime siempre")
End Try

Ejemplo 2:
' Este código muestra cómo interceptar una excepción.
Try
Console.WriteLine("Vamos a dividir 10 entre 0 y ver lo que ocurre...")
Console.WriteLine()

Dim i as Integer = 10
Dim j as Integer = 0
Dim k As Integer k = i/j ' Error en esta línea. El control pasa al bloque catch.

Catch e As Exception ' Ejecuta código que trata la excepción


' o informa al usuario de lo que ha ocurrido.
Console.WriteLine("Error:")
Console.WriteLine( e.Message ) ' Imprime el mensaje de error.
Console.WriteLine( e.Source ) ' Nombre de la aplicación o del objeto
' que produjo el error
Console.WriteLine( e.StackTrace ) ' Cadena que contiene el seguimiento
' de la pila para esta excepción
Finally ' Esta sección se ejecuta independientemente del proceso anterior.
Console.WriteLine()
Console.WriteLine("Esta instrucción se imprime siempre")
End Try
Hasta este momento ha tratado el caso concreto de una excepción no específica. Sin embargo, si
sabe de antemano qué tipo de excepción va a ocurrir, puede interceptar la excepción anticipada y
procesarla en consecuencia. Entonces puede interceptar todas las demás excepciones y tratarlas.
En el ejemplo siguiente se demuestra esto:

' Vamos a intentar realizar cierto procesamiento de archivos.


' Esto puede ocasionar varias excepciones posibles.
' Tenga en cuenta que puede utilizar determinadas excepciones para obtener información
' adicional acerca de la excepción, pero este ejemplo se centra en mostrar la ejecución
' de control para dichas excepciones.

Try
File.Create("c:/temp/test.txt") ' Puede fracasar por diversos motivos

Catch ioe As System.IO.IOException ' Este error puede ocurrir si la carpeta Temp no existe.
Console.WriteLine("Error de E/S. La carpeta c:\temp no existe")

Catch se As System.Security.SecurityException ' No tiene el permiso apropiado para


' realizar esta acción.
Console.WriteLine("No tiene los permisos de seguridad para realizar esta acción.")

Catch e As Exception ' Interceptar todas las demás excepciones.


Console.WriteLine( e.ToString() ) ' Imprimir la información de excepción estándar.
End Try
Como las configuraciones de los equipos pueden ser diferentes, puede que el ejemplo de este
paso inicie o no una excepción. Si desea forzar una excepción de E/S, cambie la ruta de acceso a
una carpeta que no exista en el equipo.