如何:在发生错误时保持控制
更新:2007 年 11 月
使用 Try...Catch...Finally 语句 (Visual Basic) 结构可以进行“结构化异常处理”。这样,如果在运行代码时发生指定的异常,则可以执行特定语句块。发生这种情况时,称代码“引发”异常,则使用适当的 Catch 语句“捕捉”该异常。
代码引起异常时运行一组语句
使用 Try...Catch...Finally 结构将可能引起异常的代码包含在内。然后,指定发生异常时要运行的代码,并且选择提供一组在控制退出 Try...Catch...Finally 结构之前要运行的语句。
下面的示例尝试精确计算在 Object 变量 givenDate 中提供的值之后 100 年的日期和时间。
Dim givenDate As Object Dim nextCentury As Date Try nextCentury = Microsoft.VisualBasic.DateAdd("yyyy", 100, givenDate) Catch thisExcep As System.ArgumentOutOfRangeException ' The resulting date/time is later than December 31, 9999. Catch thisExcep As System.ArgumentException ' At least one argument has an invalid value. Catch thisExcep As System.InvalidCastException ' The value in givenDate cannot be interpreted as a date/time. Catch ' An unforeseen exception has occurred. Finally ' This block is always run before leaving the Try structure. End Try
前三个 Catch 块处理 DateAdd 函数 (Visual Basic) 引发的可预知异常。最后一个 Catch 块中可以处理意外异常。
不管发生什么情况,Finally 块始终是离开 Try...Catch...Finally 结构之前最后要执行的代码。如果在 Try 或 Catch 块中创建或打开了对象或数据库连接等资源,如果可以,则使用 Finally 块关闭或释放这些资源。
如果异常变量 thisExcep 未出现在 Dim 等声明语句中,则将具有 As 子句的 Catch 语句用作声明。