Manejo de excepciones en VB.Net (Try Catch)

โšก Resumen inteligente

El manejo de excepciones en VB.Net gestiona los errores en tiempo de ejecuciรณn, como la divisiรณn por cero, utilizando las palabras clave Try, Catch, Finally y Throw, de modo que un programa pueda responder a los problemas de forma adecuada en lugar de bloquearse durante la ejecuciรณn.

  • ๐Ÿ” excepciรณn: Un problema que surge durante la ejecuciรณn, por ejemplo, al dividir un nรบmero entre cero.
  • ๐Ÿ›ก๏ธ Intenta atraparlo: Try encapsula el cรณdigo arriesgado; Catch maneja la excepciรณn que genera.
  • โœ… Por รบltimo: El bloque Finally se ejecuta independientemente de si se produce una excepciรณn o no.
  • ๐Ÿšฆ Lanzar: Throw genera un objeto de excepciรณn derivado de la clase System.Exception.
  • ๐Ÿงฉ Excepciones personalizadas: Hereda de ApplicationException para definir tus propios tipos de excepciรณn.
  • ๐Ÿค– Ayuda de IA: GitHub Copilot e IntelliCode Genera bloques Try Catch mientras escribes.

Manejo de excepciones en VB.Net

ยฟQuรฉ es una excepciรณn en VB.Net?

An Excepciรณn En VB.Net, se refiere a un problema que surge durante la ejecuciรณn del programa. Se produce por una circunstancia inesperada. Un buen ejemplo es cuando se realiza una operaciรณn de divisiรณn y luego se divide por cero (0). Se generarรก una excepciรณn.

ยฟQuรฉ es el manejo de excepciones en VB.Net?

Con excepciones en VB.Net, puede transferir el control de un programa de una parte a otra. En VB.Net, las excepciones se manejan utilizando las siguientes 4 palabras clave:

Palabra clave Detail
Intente El trabajo del bloque Try es identificar el bloque de cรณdigo para el cual se activarรก una excepciรณn especรญfica. Debe ir seguido de uno o varios bloques de captura.
lucha La captura de la excepciรณn se realiza en este bloque. Es un controlador de excepciones en el que se maneja la excepciรณn.
Finally Utilice el bloque Finalmente para ejecutar un conjunto de declaraciones, ya sea que haya ocurrido una excepciรณn o no.
Lanzar Se lanza una excepciรณn despuรฉs de que ocurre un problema. Este es el trabajo de la palabra clave Throw.

Una vez claras las funciones de estas cuatro palabras clave, analicemos cรณmo se combinan dentro de una misma frase.

Sintaxis de Try Catch en VB.Net

Las declaraciones Try Catch en VB.Net se definen utilizando la siguiente sintaxis:

Try
   [ try_Statement(s) ]
   [ Exit Try ]
[ Catch [ exception_name [ As type ] ] [ When expression ]
   [ catch_Statement(s) ]
   [ Exit Try ] ]
[ Catch ... ]
[ Finally
   [ finally_Statement(s) ] ]
End Try

El bloque Try/Catch debe rodear el cรณdigo que puede generar una excepciรณn. Este cรณdigo se conoce como cรณdigo protegido. Puede utilizar varias declaraciones de captura cuando necesite detectar varios tipos de excepciones.

Ejemplo de manejo de excepciones en VB.Net con Try Catch y Finalmente

Con las sentencias Try/Catch, puedes separar el cรณdigo del programa del sistema de manejo de errores. Veamos cรณmo manejar una excepciรณn usando las palabras clave Try, Catch y Finally.

Paso 1) Cree una nueva aplicaciรณn de consola.

Paso 2) Usa este cรณdigo:

Module Module1
    Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)
        Dim answer As Integer
        Try
            answer = n1 \ n2
        Catch ex As DivideByZeroException
            Console.WriteLine("Exception: {0}", ex)
        Finally
            Console.WriteLine("Answer is: {0}", answer)
        End Try
    End Sub
    Sub Main()
        divisionFunction(4, 0)
        Console.ReadKey()
    End Sub

End Module

Paso 3) Haga clic en el botรณn Iniciar de la barra de herramientas para ejecutar el cรณdigo. Deberรญa obtener el siguiente resultado:

Salida de la consola de VB.Net Try Catch Finally que muestra la excepciรณn DivideByZeroException capturada.

Aquรญ hay una captura de pantalla del cรณdigo:

Cรณdigo de ejemplo de VB.Net Try Catch Finally mostrado en Visual Studio

Explicaciรณn de Code:

  1. Creando un mรณdulo llamado Mรณdulo1.
  2. Crear un subprocedimiento llamado funciรณn divisiรณn con dos argumentos enteros n1 y n2. ByVal es una palabra clave de VB.Net que indica que los valores de los argumentos se pasarรกn por valor.
  3. Creando una variable entera llamada respuesta.
  4. Inicio del bloque Try/Catch. Necesitamos rodear el cรณdigo que sospechamos que puede generar una excepciรณn con este bloque.
  5. Realizar una operaciรณn de divisiรณn entre los valores de las variables n1 y n2. El resultado de la operaciรณn de divisiรณn se asigna a la variable respuesta. Este cรณdigo puede generar una excepciรณn, por ejemplo, cuando dividimos un nรบmero por cero, por lo que lo hemos rodeado con los bloques Try/Catch.
  6. Detectar la excepciรณn denominada DivideByZeroException y asignar el mensaje de excepciรณn generado al ex.
  7. Imprimir algรบn texto en la consola para notificar al usuario el tipo/nombre de la excepciรณn que se generรณ.
  8. El bloque Finalmente. Esto se ejecutarรก tanto si se detecta una excepciรณn como si no.
  9. Imprimir algรบn texto en la consola mostrando el resultado de la operaciรณn de divisiรณn.
  10. Fin del bloque Try, es decir, final del cรณdigo de manejo de errores.
  11. Fin del subprocedimiento de divisiรณnFunciรณn.
  12. Inicio del subprocedimiento principal.
  13. Llamar/invocar el subprocedimiento divisionFunction. Aquรญ se pasan los valores de los dos argumentos enteros. El valor de n1=4 y n2=0. Esto significa que la operaciรณn de divisiรณn serรก 4\0, es decir, n1\n2.
  14. Pausar la ventana de la consola esperando que el usuario tome medidas para cerrarla.
  15. Fin del subprocedimiento principal.
  16. Fin del mรณdulo.

Excepciones definidas por el usuario en VB.Net

VB.Net permite definir excepciones personalizadas. Se pueden obtener clases de excepciรณn definidas por el usuario a partir de la clase ApplicationException. Veamos un ejemplo:

Ejemplo de excepciรณn definida por el usuario en VB.Net

Aquรญ tienes un ejemplo de una excepciรณn definida por el usuario en VB.Net:

Paso 1) Cree una nueva aplicaciรณn de consola.

Paso 2) Utilice el siguiente cรณdigo:

Module Module1

    Public Class HeightIsZeroException : Inherits ApplicationException
        Public Sub New(ByVal text As String)
            MyBase.New(text)
        End Sub
    End Class
    Public Class Height
        Dim height As Integer = 0
        Sub showHeight()
            If (height = 0) Then
                Throw (New HeightIsZeroException("Zero Height found"))
            Else
                Console.WriteLine("Height is: {0}", height)
            End If
        End Sub
    End Class
    Sub Main()
        Dim hght As Height = New Height()
        Try
            hght.showHeight()
        Catch ex As HeightIsZeroException
            Console.WriteLine("HeightIsZeroException: {0}", ex.Message)
        End Try
        Console.ReadKey()
    End Sub

End Module

Paso 3) Haga clic en el botรณn Iniciar de la barra superior para ejecutar el cรณdigo. Deberรญa obtener el siguiente resultado:

Mensaje HeightIsZeroException definido por el usuario de VB.Net impreso en la consola

Aquรญ hay una captura de pantalla del cรณdigo:

Cรณdigo de ejemplo de una clase de excepciรณn definida por el usuario en VB.Net en Visual Studio

Explicaciรณn de Code:

  1. Creando un mรณdulo llamado Mรณdulo1.
  2. Creando una clase de excepciรณn llamada HeightIsZeroException. La clase hereda toda la clase ApplicationException.
  3. Creando un subprocedimiento llamado Nuevo. Se necesitarรก un argumento de cadena llamado texto.
  4. Llamar al constructor de la clase base y pasarle el argumento anterior.
  5. Fin del Nuevo subprocedimiento.
  6. Fin de la clase HeightIsZeroException.
  7. Creando una clase llamada Altura. Su modificador de acceso pรบblico es Pรบblico, lo que significa que serรก de acceso pรบblico.
  8. Creando una variable entera llamada Altura e inicializando su valor a 0.
  9. Creando un subprocedimiento llamado showHeight().
  10. Comprobando cuรกndo el valor de la variable Altura es 0. Hemos utilizado la condiciรณn Siโ€ฆEntonces.
  11. Lanzar HeightIsZeroException si la condiciรณn anterior es verdadera. El mensaje Se encontrรณ altura cero se mostrarรก cuando se produzca esta excepciรณn.
  12. La parte Else se ejecutarรก cuando la condiciรณn If no sea verdadera.
  13. Mensaje a imprimir en la consola mostrando la Altura cuando no es 0.
  14. Fin de la condiciรณn If.
  15. Fin del subprocedimiento showHeight().
  16. Fin de la clase Altura.
  17. Inicio del subprocedimiento principal.
  18. Crear un objeto llamado Altura como instancia de la clase Altura.
  19. Inicio del bloque de manejo de excepciones.
  20. Se invoca el subprocedimiento showHeight() definido en la clase Height. Para acceder a este mรฉtodo, se utiliza un objeto de dicha clase. Esta lรญnea puede generar una excepciรณn, por lo que se ha incluido cรณdigo para su manejo.
  21. Detectar la excepciรณn HeightIsZeroException como objeto ex en caso de que ocurra.
  22. El mensaje que se imprimirรก en la consola cuando se detecte HeightIsZeroException.
  23. Fin del bloque de manejo de excepciones.
  24. Pausa la ventana de la consola esperando que un usuario tome medidas para cerrarla.
  25. Fin del subprocedimiento principal.
  26. Fin del mรณdulo.

Lanzar excepciรณn en VB.Net

En el manejo de excepciones, puede optar por lanzar un objeto. Sin embargo, el objeto debe derivar de la clase System.Exception, directa o indirectamente. Por ejemplo:

Ejemplo de lanzamiento de excepciรณn en VB.Net

A continuaciรณn se muestra un ejemplo de cรณmo generar una excepciรณn en VB.Net:

Paso 1) Cree una nueva aplicaciรณn de consola.

Paso 2) Utilice el siguiente cรณdigo:

Module Module1

    Sub Main()
        Try
            Throw New ApplicationException("Throwing a custom exception")
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            Console.WriteLine("The Finally Block")
        End Try
        Console.ReadKey()
    End Sub


End Module

Paso 3) Haga clic en el botรณn Iniciar de la barra superior para ejecutar el cรณdigo. Deberรญa aparecer lo siguiente:

Salida de la consola de la instrucciรณn Throw de VB.Net que muestra el mensaje de excepciรณn personalizado.

Aquรญ hay una captura de pantalla del cรณdigo:

Cรณdigo de ejemplo para lanzar excepciones en VB.Net con Try Catch Finally

Explicaciรณn de Code:

  1. Creando un mรณdulo llamado Mรณdulo1.
  2. Inicio del subprocedimiento principal.
  3. Inicio del cรณdigo de manejo de errores.
  4. Lanzar un objeto de excepciรณn. Este cรณdigo puede generar una excepciรณn, por lo que lo hemos rodeado con un bloque Try/Catch.
  5. Detectar una excepciรณn como objeto ex si la lรญnea arroja una excepciรณn.
  6. Imprimiendo el mensaje de excepciรณn en la consola en caso de que ocurra.
  7. El bloque Finalmente se ejecuta tanto si se detecta una excepciรณn como si no.
  8. El mensaje que se imprimirรก en la consola cuando se ejecute el bloque Finalmente.
  9. Fin del cรณdigo de manejo de excepciones.
  10. Pausa la consola por un momento esperando que un usuario tome medidas para cerrarla.
  11. Fin del subprocedimiento principal.
  12. Fin del mรณdulo.

Preguntas Frecuentes

Sรญ. Una instrucciรณn Try es vรกlida sin Catch siempre que incluya un bloque Finally. Esta forma Try Finally ejecuta cรณdigo de limpieza, pero no maneja la excepciรณn en sรญ.

Sรญ. Enumera varios bloques Catch para manejar diferentes tipos de excepciones. Ordรฉnalos del mรกs especรญfico al menos especรญfico, ya que VB.Net los comprueba en secuencia y utiliza la primera coincidencia.

Casi siempre. Finalmente se ejecuta independientemente de si se captura una excepciรณn o no, incluso despuรฉs de un Return. Solo se omite en caso de una instrucciรณn End o una StackOverflowException.

Throw vuelve a lanzar la excepciรณn actual y conserva su pila original. trace. Lanzar ex reinicia la pila trace a la lรญnea actual, ocultando dรณnde realmente comenzรณ el error. Preferir Throw simple.

El compilador detecta un error de sintaxis antes de que se ejecute el programa. Una excepciรณn se produce en tiempo de ejecuciรณn y puede gestionarse con un bloque Try Catch.

Entre las excepciones mรกs frecuentes se encuentran DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException y OverflowException. Todas heredan de System.Exception y pueden capturarse individualmente.

Sรญ. Copiloto de GitHub Convierte un comentario en lenguaje natural en un bloque Try Catch Finally completo y sugiere el tipo de excepciรณn adecuado. Siempre revise el controlador generado.

Sรญ. Visual Studio inteligenciaCode Ofrece autocompletado de lรญnea completa sensible al contexto para clรกusulas Catch y tipos de excepciones, aprendido de miles de proyectos de cรณdigo abierto.

Resumir este post con: