Exception 为什么运行时错误UNCAUGHT_异常在我捕获异常时被触发?

Exception 为什么运行时错误UNCAUGHT_异常在我捕获异常时被触发?,exception,abap,Exception,Abap,我希望下面的程序输出错误消息(通过WRITE),但实际上它在引发异常类型时触发运行时错误UNCAUGHT\u EXCEPTION(短转储): REPORT. CLASS lcx_exception DEFINITION INHERITING FROM cx_static_check. ENDCLASS. CLASS lcl_app DEFINITION. PUBLIC SECTION. METHODS main. ENDCLASS. CLASS lcl_app IMPLEMENTAT

我希望下面的程序输出错误消息(通过
WRITE
),但实际上它在
引发异常类型时触发运行时错误
UNCAUGHT\u EXCEPTION
(短转储):

REPORT.
CLASS lcx_exception DEFINITION INHERITING FROM cx_static_check.
ENDCLASS.
CLASS lcl_app DEFINITION.
  PUBLIC SECTION.
    METHODS main.
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
  METHOD main.
    RAISE EXCEPTION TYPE lcx_exception.  "<===== HERE, run time error UNCAUGHT_EXCEPTION
  ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
  TRY.
    NEW lcl_app( )->main( ).
  CATCH lcx_exception INTO DATA(ex).
    WRITE: / 'Exception:', ex->get_text( ).
  ENDTRY.
报告。
类lcx\U异常定义继承自cx\U静态\U检查。
末级。
类lcl_应用程序定义。
公共部分。
主要方法。
末级。
类lcl_应用程序实现。
方法main。
引发异常类型lcx\U异常。“main()。
将lcx_异常捕获到数据中(例如)。
写入:/'Exception:',ex->get_text()。
结束。
解决方案是在方法声明中添加(最终可能会在此处列出更多的异常类),以便在异常发生时自动将其传播到调用过程(希望能够捕获到):

REPORT.
CLASS lcx_exception DEFINITION INHERITING FROM cx_static_check.
ENDCLASS.
CLASS lcl_app DEFINITION.
  PUBLIC SECTION.
    METHODS main RAISING lcx_exception. "<==================== HERE
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
  METHOD main.
    RAISE EXCEPTION TYPE lcx_exception.
  ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
  TRY.
    NEW lcl_app( )->main( ).
  CATCH lcx_exception INTO DATA(ex).
    WRITE: / 'Exception:', ex->get_text( ).
  ENDTRY.
报告。
类lcx\U异常定义继承自cx\U静态\U检查。
末级。
类lcl_应用程序定义。
公共部分。
方法main引发lcx_异常。“main()。
将lcx_异常捕获到数据中(例如)。
写入:/'Exception:',ex->get_text()。
结束。

请注意,不能直接或间接列出从根类
CX\u NO\u CHECK
继承的异常类,因为这些异常是隐式传播的。只有从
CX\u STATIC\u CHECK
CX\u DYNAMIC\u CHECK
直接或间接继承的异常类需要在
提升后指示才能传播。这两个根类也可能被指示传播所有异常类。

基于我对另一个类的评论,这是一个很好的问题!;)