# Catch

指定在 try 语句执行期间如果抛出值或错误时要执行的代码.

    Catch ErrorClass as OutputVar
    {
        语句
    }

## 参数

ErrorClass

  类型: Class

  应该被捕获的值的类, 如 `Error`, `TimeoutError` 或 `MyCustomError`. 这也可以是一个以逗号分隔的类的列表. 类必须由其确切的全名指定, 而不是任意的表达式, 因为每个类的原型在加载时被解析. 任何内置的或用户定义的类都可以被使用, 即使它不是从 Error 派生的.

  如果没有指定类, 默认是 `Error`.

  要捕捉任何类, 请使用 `Catch Any`.

  如果使用了无效的类名, 或者由于存在同名的局部变量而无法访问一个类, 则会显示加载时错误.

OutputVar

  类型: 变量

  存储抛出值的变量, 这通常是一个 Error 对象. 这不能是一个动态变量.

  如果省略, 抛出的值不能被直接访问, 但仍然可以通过使用没有参数的 Throw 来重新抛出.

Statement(s)

  抛出值或错误时执行的语句.

  如果只使用一个语句, 一般不需要大括号. 有关详情, 请参阅 {...} (block).

## 备注

多个 catch 语句可以一个接一个地使用, 每个语句指定一个不同的类(或多个类). 如果值不是任何一个列出的类的实例, 它就不会被这个 try-catch 捕获, 但可能会被调用堆栈中更高的一个捕获.

catch 的每次使用都必须附属于(与之关联) 它上面的 try 语句. catch 总是附属于它上面最近的未被认领的 try 语句, 除非使用区块来改变这种行为.

参数列表可以选择括在括号中, 在这种情况下, `Catch` 后的空格或制表符是可选的.

Catch 后面可以有 else, 如果在相关的 try 块中没有抛出异常, 则执行 else.

可选使用 One True Brace(OTB) 样式. 例如:

    try {
        ...
    } catch Error {
        ...
    }

加载时错误不能被捕获, 因为它们发生在 try 语句执行之前.

存储在 OutputVar(如果存在) 中的值是一个 Error 对象(Error 类或子类的一个实例).

## 相关

Try, Throw, Error 对象, Else, Finally, 区块, OnError

## 示例

请参阅 Try.

dftg