CÓMO: Interceptar excepciones en Visual Basic .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 301283 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E301283
Expandir todo | Contraer todo

En esta página

Resumen

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.

Requisitos

La lista siguiente describe el hardware, el software, la infraestructura de red y los Service Pack recomendados que necesitará:

  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server o Windows NT 4.0 Server
  • Microsoft Visual Basic .NET

Cómo interceptar excepciones en Visual Basic .NET

  1. Cree una nueva aplicación de consola en Visual Basic .NET.
  2. 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.
  3. Presione la tecla F5 para ver la excepción.
  4. 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
  5. Presione CTRL+F5 para ejecutar el proyecto. Observe que aparecerá el mensaje de error del bloque catch.
  6. 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
  7. Presione CTRL+F5 para ejecutar el proyecto.
  8. 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
  9. 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.

REFERENCIAS

Para obtener más información al respecto, consulte el Kit de desarrollo de software (SDK) de Microsoft .NET Framework.

Propiedades

Id. de artículo: 301283 - Última revisión: martes, 15 de enero de 2002 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palabras clave: 
kbhowto kbhowtomaster KB301283

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com