点击或拖拽改变大小

Functions.ErrorBlock 方法

X#
返回并可选择性地更改在发生运行时错误时执行的代码块。

命名空间:  XSharp.RT
程序集:  XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法
 FUNCTION ErrorBlock() AS USUAL
查看代码

返回值

类型:__Usual
如果未指定cbNewSetting,ErrorBlock()返回当前设置。
如果指定了cbNewSetting,则返回先前的设置。
备注
X#定义了一个默认的错误处理代码块,用于确定在发生运行时错误时该做什么。ErrorBlock()允许您用自定义的错误处理机制覆盖此默认机制。 将错误处理程序指定为具有以下形式的代码块:
X#
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结构内发生错误时发布并调用错误处理代码块:
X#
 1LOCAL cbErrorHandler, cbLastHandler, oError
 2cbErrorHandler := {|oError|MyErrorHandler(oError)}
 3                            // 保存当前处理程序
 4cbLastHandler := ErrorBlock(cbErrorHandler)
 5BEGIN SEQUENCE
 6    .
 7    . <paramref name="OperationStatements" />
 8    .
 9                            // 从BREAK接收错误对象
10RECOVER USING oErrorInfo
11    .
12    . <paramref name="RecoveryStatements" />
13    .
14END
15ErrorBlock(cbLastHandler)            // 恢复处理程序
16FUNCTION MyErrorHandler(oError)
17    BREAK oError
18                            // 将错误对象返回到RECOVER
此示例改进了前面的示例。不是设置ErrorBlock({|oError| _Break(oError)})(它只是执行BREAK而不利用错误系统的功能,例如VOERROR.LOG), 您可以为Error类设置Init方法,如下所示:
参见