如何解决尽管我捕获了异常,但为什么会触发运行时错误 UNCAUGHT_EXCEPTION?
我希望以下程序输出错误消息(通过 WRITE
),但实际上它在 UNCAUGHT_EXCEPTION
时触发了运行时错误 RAISE EXCEPTION TYPE
(短转储):
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.
解决方法
解决方案是在方法声明中添加RAISING lcx_exception
(最终可能会在此处列出更多异常类),以便异常在发生时自动传播到调用过程(并希望被捕获):
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.
请注意,您不能直接或间接列出从根类 CX_NO_CHECK
继承的异常类,因为这些异常是隐式传播的。只有直接或间接继承自 CX_STATIC_CHECK
和 CX_DYNAMIC_CHECK
的异常类需要在 RAISING
后指明才能传播。也可以指示这 2 个根类传播所有异常类。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。