如何:在 Visual Basic 中捕获异常
此示例显示如何使用 Try 和 Catch 块捕获异常。
示例
此示例显示如何使用 Try…Catch 块捕获 OverflowException。
此代码示例也可用作 IntelliSense 代码段。 在代码段选择器中,它位于**“Visual Basic 语言”**中。 有关更多信息,请参见如何:插入 IntelliSense 代码段。
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 块,该块处理 Exception、IOException 以及从 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 中使用 Try...Catch 块测试代码
如何:在 Visual Basic 中使用 Try…Finally 块清理资源
如何:在 Visual Basic 中筛选 Catch 块中的错误