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