如何:在发生错误时保持控制 (Visual Basic)

使用 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 函数引发的可预知异常。 最后一个 Catch 块中可以处理意外异常。

    不管发生什么情况,Finally 块始终是离开 Try...Catch...Finally 结构之前最后要执行的代码。 如果在 Try 或 Catch 块中创建或打开了对象或数据库连接等资源,如果可以,则使用 Finally 块关闭或释放这些资源。

    如果异常变量 thisExcep 未出现在 Dim 等声明语句中,则将具有 As 子句的 Catch 语句用作声明。

请参见

任务

如何:将控件转移到控件结构外 (Visual Basic)

如何:根据一个或多个条件运行语句 (Visual Basic)

如何:测试表达式的多个值 (Visual Basic)

概念

决策结构 (Visual Basic)

循环结构 (Visual Basic)

其他控件结构 (Visual Basic)

嵌套的控件结构 (Visual Basic)

其他资源

控制流 (Visual Basic)