如何:在 Visual Basic 中捕获异常

更新:2007 年 11 月

此示例显示如何使用 Try 和 Catch 块捕获异常。

示例

此示例显示如何使用 Try¡­Catch 块捕获 OverflowException

此代码示例也可用作 IntelliSense 代码段。在代码段选择器中,此代码示例位于“Visual Basic 语言”中。有关更多信息,请参见如何:在代码中插入代码段 (Visual Basic)

Dim Top As Double = 5
Dim Bottom As Double = 0
Dim Result As Integer
Try
    Result = CType(Top / Bottom, Integer)
Catch Exc As System.OverflowException
    MsgBox("Attempt to divide by zero resulted in overflow")
End Try

此示例需要:

  • System 命名空间的引用。

下面的代码示例实现一个 Try...Catch 块,该块处理 ExceptionIOException 以及从 IOException 派生的所有异常。

Try
    ' Add code for your I/O task here. 
Catch dirNotFound As System.IO.DirectoryNotFoundException
    Throw dirNotFound
Catch fileNotFound As System.IO.FileNotFoundException
    Throw fileNotFound
Catch pathTooLong As System.IO.PathTooLongException
    Throw pathTooLong
Catch ioEx As System.IO.IOException
    Throw ioEx
Catch security As System.Security.SecurityException
    Throw security
Catch ex As Exception
    Throw ex
Finally
    ' Dispose of any resources you used or opened in the Try block. 
End Try

将要执行的代码添加到 Try 块中。

可靠编程

将此代码块用作起点,以便在 Try...Catch 语句中包含数据操作。此 Try...Catch 块旨在捕获并再次引发所有异常。这对您的项目可能并不合适。有关异常处理选项的讨论,请参见 使用 IntelliSense 代码段的最佳做法

您可以通过使用 Windows 窗体控件(如限制供用户选择的有效文件名的 OpenFileDialog 组件(Windows 窗体) 组件控件和 SaveFileDialog 组件(Windows 窗体) 组件控件)减少引发异常的可能性。FileInfo.Exists 属性可以在您试图打开某个文件时检查该文件是否存在。但是,使用这些控件和类并不是万无一失的。在用户选择文件时和代码运行时之间,文件系统可能会改变。因此,当使用文件时,几乎始终都需要异常处理。

安全性

对于许多文件任务,程序集需要由 FileIOPermission 类授予的特权级别。如果在部分信任的上下文中运行,代码可能会因特权不足而引发异常。有关更多信息,请参见代码访问安全性基础知识。如果文件存在,用户还需要有对该文件的访问权限。有关更多信息,请参见访问控制列表 (ACL)

请不要根据文件扩展名来判断文件的内容。例如,文件 Form1.vb 可能不是 Visual Basic 源文件。

请参见

任务

如何:在 Visual Basic 中引发异常

如何:在 Visual Basic 中使用 Try...Catch 块测试代码

如何:在 Visual Basic 中使用 Try…Finally 块清理资源

如何:在 Visual Basic 中筛选 Catch 块中的错误

如何:检查异常的内部异常

异常处理疑难解答

概念

选择何时使用结构化异常处理和非结构化异常处理