class Error extends Object
Error(错误) 对象是由内置代码在运行时发生错误时抛出的, 也可由脚本显式抛出. 以下是标准属性.
Message: 错误消息.
What: 引起异常的原因. 这通常是一个函数的名称, 但对于由表达式中的错误而抛出的异常(例如在非数字值上使用数学运算符), 则为空白.
Extra: 与错误有关的字符串值(如果有). 如果这个值可以转换为非空字符串, 标准错误对话框会显示一行 "Specifically:" 后面跟着这个字符串.
File: 包含发生错误的行或构造错误对象的脚本文件的完整路径.
Line: 错误发生的行号, 或者错误对象被构造的行号.
Stack: 代表 Error 对象被构造时的调用栈的字符串. 每一行的格式如下:
File (Line) : [What] SourceCode`r`n
> What`r`n
... N more
Stack
属性不能超过 2047 个字符.注意: 标准错误对话框要求 Message, Extra, File 和 Line 都是自有值属性.
创建 Error 对象.
NewError := Error(Message , What, Extra)
Error 可以用 Error 类型中列出的某个子类替换, 尽管一些子类可能会采用不同的参数.
这些参数直接对应于上面描述的属性, 但对于覆盖 __New 方法的 Error 子类来说, 参数可能有所不同.
Message 和 Extra 被转换为字符串. 如果一个异常抛出而且没有被捕获, 则会通过一个错误对话框来显示它们.
What 指示错误的来源. 它可以是任意字符串, 但应该是负整数或正在运行的函数的名称. 指定 -1 表示当前函数, -2 表示调用它的函数, 依此类推. 如果脚本被编译或者该值不能识别有效的堆栈帧, 那么该值将被转换为字符串并赋值给 NewError.What
. 否则, 将使用标识的堆栈帧来确定其他属性:
NewError.What
包含函数的名称.NewError.Line
和 NewError.File
表示 调用 函数的行.NewError.Stack
包含部分堆栈跟踪, 在顶部指示堆栈帧.使用 What 参数可以允许复杂函数使用帮助函数来执行其工作或参数验证, 同时从任何报告的错误信息中忽略这些内部细节. 例如:
MyFunction(a, b) { CheckArg "a", a CheckArg "b", b ;... CheckArg(name, value) { if value < 0 throw ValueError(name " is negative", "myfunction", value) } } try MyFunction(1, -1) ; err.Line 显示为这一行. catch ValueError as err MsgBox Format("{1}: {2}.`n`nFile:`t{3}`nLine:`t{4}`nWhat:`t{5}`nStack:`n{6}" , type(err), err.Message, err.File, err.Line, err.What, err.Stack)
try SomeFunction() catch as e MsgBox(type(e) " in " e.What ", which was called at line " e.Line) SomeFunction() { throw Error("Fail", -1) }
Error 的以下子类是预定义的:
OSError(Code)
, 其中 Code 是数字, 根据给定的 OS(系统) 定义的错误代码设置 Number 和 Message. 如果省略 Code, 则默认为 A_LastError. 例如, OSError(5).Message
返回 "(5) 禁止访问."也可以使用基 Error 类来抛出 Error.