# Throw [v1.1.04+]

发生错误时发出信号. 此信号可以被 try-catch 语句捕获.

    Throw , Expression

## 参数

Expression

  要保存到 catch 的 OutputVar 中的值.

  由于此参数为表达式, 所以下面所有的例子都是有效的:

      throw 3
      throw "literal string"
      throw MyVar
      throw i + 1
      throw { what: "Custom error", file: A_LineFile, line: A_LineNumber } ; 抛出一个对象

  此参数总是为表达式, 所以变量引用不应该括在百分号中, 除非执行展开双重引用.

  [v1.1.05+]: 如果省略, 则抛出带默认消息的 exception 对象.

## Exception()

创建一个具有属性的对象, 这也是与运行时错误创建的异常所通用的:

    Exception(Message , What, Extra)

此对象包含以下属性:

- Message: 错误消息或 ErrorLevel 值.
- What: 错误发生时正在或即将执行的命令或函数的名称.
- Extra: 错误的额外信息.
- File: 包含发生错误的语句的脚本文件的完整路径.
- Line: 发生错误的语句行号.

如果省略 What , 则它默认为当前函数或子程序的名称. 否则它可以为字符串或到调用堆栈顶部的负偏移. 例如, 使用值 -1 来设置 `Exception.What` 为当前函数或子线程名称, 且设置 `Exception.Line` 和 `Exception.File` 为调用它的行号和文件. 不过, 如果这个脚本已经被编译或者偏移是无效的, What 将转换为一个字符串.

Message 和 Extra 被转换为字符串. 如果一个异常抛出而且没有被获取, 它们将在错误日志中显示.

    try
        SomeFunction()
    catch e
        MsgBox % "Error in " e.What ", which was called at line " e.Line

    SomeFunction() {
        throw Exception("Fail", -1)
    }

## 相关

Try, Catch, Finally, OnError()

## 示例

请参阅 Try.

dftg