class Error extends Object
Error(错误) 对象是由内置代码在运行时发生错误时抛出的, 也可由脚本显式抛出.
错误对象可通过 Error() 创建, 并通过 Catch 捕获.
"ErrorObj" 作为任何错误对象的占位符, 因为 "Error" 为类本身.
除继承自 Object 的方法和属性外, Error 对象还具有以下预定义的方法和属性.
创建 Error 对象.
ErrorObj := Error(Message , What, Extra) ErrorObj := Error.Call(Message , What, Extra)
Error 可以用 Error 类型中列出的某个子类替换, 尽管一些子类可能会采用不同的参数.
这些参数直接对应于属性 Message, What 和 Extra, 但对于覆盖 __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)
}
检索或设置与错误有关的字符串值.
CurrentExtra := ErrorObj.Extra
ErrorObj.Extra := NewExtra
标准错误对话框会显示带有 "Specifically:" 的行, 后面跟着该字符串.
检索或设置包含发生错误的行或构造错误对象的脚本文件的完整路径.
CurrentFile := ErrorObj.File
ErrorObj.File := NewFile
检索或设置错误发生的行号, 或者错误对象被构造的行号.
CurrentLine := ErrorObj.Line
ErrorObj.Line := NewLine
检索或设置错误消息.
CurrentMessage := ErrorObj.Message
ErrorObj.Message := NewMessage
检索或设置代表 Error 对象被构造时的调用栈的字符串.
CurrentStack := ErrorObj.Stack
ErrorObj.Stack := NewStack
每一行的格式如下:
File (Line) : [What] SourceCode`r`n> What`r`n... N moreStack 属性不能超过 2047 个字符.检索或设置引起异常的原因.
CurrentWhat := ErrorObj.What
ErrorObj.What := NewWhat
这通常是一个函数的名称, 但对于由表达式中的错误而抛出的异常(例如在非数字值上使用数学运算符), 则为空白.
Error 的以下子类是预定义的:
OSError(Code), 其中 Code 是数字, 根据给定的 OS(系统) 定义的错误代码设置 Number 和 Message. 如果省略 Code, 则默认为 A_LastError. 例如, OSError(5).Message 返回 "(5) 禁止访问."也可以使用基 Error 类来抛出 Error.
标准错误对话框要求 Message, Extra, File 和 Line 属性是自有值属性.