Functions.ErrorBlock 方法 | |
返回并可选择性地更改在发生运行时错误时执行的代码块。
命名空间:
XSharp.RT
程序集:
XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法 FUNCTION ErrorBlock() AS USUAL
public static __Usual ErrorBlock()
查看代码返回值
类型:
__Usual
如果未指定
cbNewSetting,ErrorBlock()返回当前设置。
如果指定了
cbNewSetting,则返回先前的设置。
备注
X#定义了一个默认的错误处理代码块,用于确定在发生运行时错误时该做什么。ErrorBlock()允许您用自定义的错误处理机制覆盖此默认机制。
将错误处理程序指定为具有以下形式的代码块:
1{|<paramref name="oError" />| <paramref name="uList" />}
其中
oError是包含错误信息的错误对象,
uList是调用实际处理错误的函数的USUAL表达式的逗号分隔列表。
在代码块内,可以向错误对象发送消息以获取有关错误的信息。
错误处理代码块返回TRUE值会重试失败的操作,而返回FALSE值则恢复处理。
错误处理代码块可以指定为表达式列表或函数调用。
函数调用更有用,因为您可以使用X#控制语句而不是表达式。
特别是在有待处理的BEGIN SEQUENCE或LabelPush(),并且您想要BREAK到最近的RECOVER语句时,这一点尤为重要。
这意味着错误处理代码块可以与BEGIN SEQUENCE...END控制结构结合使用。
在错误处理代码块内,您可以处理具有通用恢复机制的设备、低级和常见错误。
如果操作需要特定的错误处理,请定义BEGIN SEQUENCE或LabelPush(),然后BREAK到RECOVER语句,返回错误对象进行本地处理。请参见下面的示例。
有关错误对象的结构和操作的更多信息,请参阅Error类条目。
示例
此代码片段在BEGIN SEQUENCE结构内发生错误时发布并调用错误处理代码块:
1LOCAL cbErrorHandler, cbLastHandler, oError
2cbErrorHandler := {|oError|MyErrorHandler(oError)}
3
4cbLastHandler := ErrorBlock(cbErrorHandler)
5BEGIN SEQUENCE
6 .
7 . <paramref name="OperationStatements" />
8 .
9
10RECOVER USING oErrorInfo
11 .
12 . <paramref name="RecoveryStatements" />
13 .
14END
15ErrorBlock(cbLastHandler)
16FUNCTION MyErrorHandler(oError)
17 BREAK oError
18
此示例改进了前面的示例。不是设置ErrorBlock({|oError| _Break(oError)})(它只是执行BREAK而不利用错误系统的功能,例如VOERROR.LOG),
您可以为Error类设置Init方法,如下所示:
参见