SAP-ABAP:SAP的`TRY...CATCH` 异常处理机制详解
一、异常处理架构与核心机制
1. 异常分类与层次结构
异常类型 | 触发机制 | 处理要求 | 典型子类 |
---|---|---|---|
CX_STATIC_CHECK | 编译器强制检查(必须声明或捕获) | 必须显式处理 | CX_SY_ZERODIVIDE (除零错误) |
CX_DYNAMIC_CHECK | 运行时检查(若未处理则触发运行时错误RESUMABLE_FAILURE ) | 推荐显式处理 | CX_SY_OPEN_SQL_DB (SQL异常) |
CX_NO_CHECK | 不可恢复错误(如内存溢出),无需声明 | 无法捕获(需全局处理) | CX_SY_NO_HANDLER (无处理器) |
CX_ROOT | 所有异常基类 | 通用捕获 | - |
2. 异常传播规则
- 作用域穿透:若当前代码块未捕获异常,将向调用堆栈上层传播,直至被捕获或触发短转储(
ST22
)。 - RESUME机制:通过
CATCH BEFORE UNWIND
捕获异常后,可使用RESUME
恢复执行(仅适用于RESUMABLE
异常)。TRY.RAISE RESUMABLE EXCEPTION TYPE cx_demo.CATCH BEFORE UNWIND cx_demo INTO lr_ex." 可在此处处理异常后继续执行RESUME. ENDTRY.