Show/Hide Toolbars

XSharp

用途

BEGIN SEQUENCE 关键字声明异常处理块的开始。

语法

BEGIN SEQUENCE
  tryStatements
[RECOVER [USING localVariable]
  recoveryStatements
]
[FINALLY
  finallyStatements
]
END [SEQUENCE]

语法中:

 

tryStatements 一个或多个可能导致异常抛出的语句或表达式。
localVariable 一个局部变量,用于接收 BEGIN SEQUENCE(开始序列)和 RECOVER(恢复)语句之间的任何代码抛出的异常。该变量类型必须为 USUAL。
recoveryStatements如果任何 tryStatements 抛出异常,将执行的一条或多条语句或表达式。
finallyStatements 无论是否抛出异常,都将始终执行的一条或多条语句或表达式。

 

备注

BEGIN SEQUENCE ... END SEQUENCE 是一种控制结构,用于异常和运行时错误处理。它限定了一个定义离散操作的语句块,包括调用的存储过程和函数。

 

当在 BEGIN SEQUENCE 语句之后直到相应的 RECOVER 语句之前的语句块中的任何地方出现异常时,控制权将分支到紧跟 RECOVER 语句之后的程序语句。如果未指定 RECOVER 语句,控制将分支到 FINALLY 语句之后的语句,从而终止序列。如果未指定 FINALLY 语句,控制将分支到 END SEQUENCE 语句之后的语句,从而终止序列。

 

如果控制到达 RECOVER 语句,但没有抛出异常,则控制分支到 FINALLY 语句后面的语句。如果未指定 FINALLY 语句,控制将分支到 END SEQUENCE 语句之后的语句,从而终止序列。

 

RECOVER 语句可选择接收 tryStatements 块中的语句抛出的异常。这通常是一个错误对象,由 ErrorBlock() 定义的当前错误处理块生成并返回。如果返回了错误对象,则可以向其发送信息,以查询有关错误的信息。有了这些信息,运行时错误就可以在操作的上下文中处理,而不是在当前的运行时错误处理程序中处理。

 

FINALLY 语句块可用于清理在 BEGIN SEQUENCE 块中分配的任何资源。无论 BEGIN SEQUENCE 块如何退出,控制权始终会传递到 FINALLY 块(如果存在)。

 

在 BEGIN SEQUENCE 和 RECOVER 语句之间不能使用 RETURN、LOOP 或 EXIT。但在 RECOVER 和 FINALLY 语句块中,可以进行 LOOP、EXIT、BREAK(中断)或 RETURN操作,因为此时序列已基本完成。在 RECOVER 语句块中使用 LOOP 可以重新执行序列语句块。

 

BEGIN SEQUENCE ... END SEQUENCE 控制结构可以嵌套到任意深度。

 

如果在任何 BEGIN SEQUENCE 块内执行,CanBreak() 函数将返回 TRUE。

示例

 

FUNCTION Start() AS VOID
LOCAL x := 4, y := 0 AS INT
BEGIN SEQUENCE
? x / y
RECOVER
? "oops"
FINALLY
? "in finally block"
END SEQUENCE
RETURN

 

参看

BREAK
THROW
TRY-CATCH-FINALLY