如何:在发生错误时保持控制

更新: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 语句用作声明。

请参见

任务

如何:将控制转移到控制结构外

如何:根据一个或多个条件运行语句

如何:测试表达式的多个值

概念

决策结构

循环结构

其他控制结构

嵌套的控制结构

其他资源

控制流 (Visual Basic)