Os explicamos cómo funciona el manejo de errores o excepciones en Visual Basci .Net, lenguaje de programación visual de Microsoft perteneciente a Visual Studio .Net. Os explicamos con ejemplos cómo capturar los posibles errores que se puedan producir en la ejecución normal del código para mostrar mensajes al usuario (o para que el usuario no se entere del error).

Manejo de errores en versiones anteriores de Visual Basic

En versiones anteriores de Visual Basic, como la versión 6, el control de errores se realizaba mediante:

o bien utilizando «On Error Resume Next».

Visual Basic .Net sigue permitiendo el uso de estas dos instrucciones para el control de errores, pero Microsoft recomienda encarecidamente que no se utilicen y se empleen las nuevas instrucciones Try…Catch…Finally.

El objeto Exception en Visual Basic .NET

El objeto Exception se encuentra definido en .NET Framework y su nombre completo es System.Exception. En este marco de trabajo se definen otras dos clases genéricas: System.SystemException y System.ApplicationException. Casi todos los objetos de Exception definidos en .NET Framework heredan de SystemException, mientras que los objetos de excepción personalizados y específicos de cada aplicación heredan de ApplicationException. Estas dos clases no agregan ninguna propiedad o método a la clase base Exception.

A continuación enumeramos algunas de las clases Exception en los espacios de nombres más importantes de .NET Framework:

Espacios de nombreClases de excepción
SystemArgumentNullException, ArgumentOutOfRangeException, DivideByZeroException, IndexOutOfRangeException, NullReference-Exception, OverflowException, StackOverflowException
System.IODirectoryNotFoundException, EndOfStreamException, FileNotFoundException, PathTooLongException, FileLoadException, DriveNotFoundException
System.DataDuplicateNameException, InvalidConstraintException, InvalidExpressionException, MissingPrimaryKeyException, NoNullAllowedException, ReadOnlyException
System.Runtime.InteropServicesInvalidComObjectException, InvalidOleVariantTypeException, SEHException

La instrucción Try…Catch…End Try ó Finally en Visual Basic .NET

La palabra clave Catch

Siempre que se añada código fuente que pueda iniciar una excepción será conveniente introducirlo en un bloque TryCatchEnd. El código que quede entre Try y Catch estará protegido contra excepciones y si se iniciara una excepción, Visual Basic pasaría el control al primer bloque Catch (filtro de excepciones). En el bloque de código Catch se podrán examinar las propiedades del objeto Exception y decidir cómo reaccionar al error.

Un ejemplo sencillo de control de excepciones:

    Private Sub btExcepcion_Click(ByVal sender As System.Object, _
                                  ByVal e As System.EventArgs) _
                                  Handles btExcepcion.Click
        Dim x, y As Integer

        Try
            y = CInt(InputBox("Introduzca Y", "Control de excepciones", 0))
            x = x  y
            'Si "y" = 0, la siguiente instrucción no se ejecutará
            y = CInt(10 ^ x)
            MsgBox("El valor de Y es: " + CStr(y))
        Catch ex As Exception
            If ex.Message = "Intento de dividir por cero." Then
                MsgBox("Error al intentar dividir por cero.", _
                       MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
            Else
                MsgBox("Se ha producido el siguiente error: " + ex.Message, _
                       MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
            End If
        End Try
    End Sub