Exception Filtering in the Catch Block in VB.net

By: Steven Holzner Emailed: 1790 times Printed: 2623 times    

When you're handling exceptions, you usually want to handle different types of exceptions differently, according to the nature of the exception that occurred. This process is called filtering. There are actually two ways to filter exceptions with Catch blocks. First, you can filter on specific classes of exceptions, which means you have to prepare for the various exceptions you want to handle.

Exceptions are based on the Visual Basic Exception class (which, like all other objects in Visual Basic, is based on the Object class). In general, when you use Visual Basic statements that are capable of throwing exceptions, the Visual Basic documentation will tell you what possible exceptions each statement may throw. However, that won't help in tracking down exceptions that occur when you're just using the general syntax of the language, such as when you divide two numbers and an overflow exception occurs. To track down what class such an exception corresponds to, you could take a look at the Visual Basic documentation for the Exception class, which lists the classes derived from it:

Object
   Exception
      ApplicationException
      CodeDomSerializerException
      InvalidPrinterException
      IOException
      IsolatedStorageException
      PathTooLongException
      CookieException
      ProtocolViolationException
      WebException
      MissingManifestResourceException
      SUDSGeneratorException
      SUDSParserException
      SystemException
      UriFormatException
      SoapException

Each derived class itself has many derived classes, and if you keep searching (each class above is a hyperlink in the documentation, so you just keep clicking), you'll eventually find the OverflowException class, which is based on the ArithmeticException class, which is based on the SystemException class, which is based on the Exception class:

Object
   Exception
      SystemException
         ArithmeticException
            OverflowException

There is an easier way to do this if you can generate the exception you're anticipating—just use the Exception class's getType method (such as e.getType) to get the type of the exception as a string. Here's an example where I'm providing code to explicitly handle overflow exceptions:

Module Module1
    Sub Main()
        Dim int1 = 0, int2 = 1, int3 As Integer
        Try
            int3 = int2 / int1
            System.Console.WriteLine("The answer is {0}", int3)
        Catch e As OverflowException
            System.Console.WriteLine("Exception: Arithmetic overflow!")
        End Try
    End Sub
End Module

The second exception-filtering option lets you use the Catch statement to filter on any conditional expression, using the When keyword. This option is often used to filter by exception number, which you can check with the Err object's Number property. Here's an example that filters overflow exceptions by number (which is exception number 6 in Visual Basic .NET):

Module Module1
    Sub Main()
        Dim int1 = 0, int2 = 1, int3 As Integer
        Try
            int3 = int2 / int1
            System.Console.WriteLine("The answer is {0}", int3)
        Catch When Err.Number = 6
            System.Console.WriteLine("Exception: Arithmetic overflow!")
        End Try
    End Sub
End Module

Most Viewed Articles (in VB.net )

Latest Articles (in VB.net)

Comment on this tutorial