无法捕获 TYPE_NOT_FOUND 异常
Can't catch TYPE_NOT_FOUND exception
我正在调用 cl_abap_typedescr=>describe_by_name
方法。它可能会抛出 TYPE_NOT_FOUND
异常。我来自 c#,在 c# 中很容易发现这样的错误。但是在 ABAP 中我无法捕捉到异常。
首先是我无法在我的代码中使用 TYPE_NOT_FOUND
异常对象。它只是不存在。它继续捕捉 CX_ROOT
也无济于事的事实。它只是忽略了我的 try catch 子句并崩溃了:
TRY .
descr_ref0 ?= cl_abap_typedescr=>describe_by_name('iabc1').
CATCH cx_root.
BREAK-POINT.
ENDTRY.
TYPE_NOT_FOUND
是 not a class-based exception. You'll need to use the old syntax 并为每个异常分配一个非零值,然后检查 SY-SUBRC
该值是否再次出现。
我假设您需要类型转换,因此为此提供了一个额外的步骤。
此语法不如新语法优雅,但这是我编译您的示例的唯一方法:
data descr_ref1 type ref to cl_abap_typedescr.
call method cl_abap_typedescr=>describe_by_name(
exporting p_name = 'abc1'
receiving p_descr_ref = descr_ref1
exceptions type_not_found = 1 ).
if sy-subrc <> 0.
break-point.
else.
descr_ref0 ?= descr_ref1.
endif.
编辑:
你可以通过查看方法来判断使用了哪种类型的异常:
或者您可以在编辑器中使用 "Pattern" 命令来获得正确的语法。
我正在调用 cl_abap_typedescr=>describe_by_name
方法。它可能会抛出 TYPE_NOT_FOUND
异常。我来自 c#,在 c# 中很容易发现这样的错误。但是在 ABAP 中我无法捕捉到异常。
首先是我无法在我的代码中使用 TYPE_NOT_FOUND
异常对象。它只是不存在。它继续捕捉 CX_ROOT
也无济于事的事实。它只是忽略了我的 try catch 子句并崩溃了:
TRY .
descr_ref0 ?= cl_abap_typedescr=>describe_by_name('iabc1').
CATCH cx_root.
BREAK-POINT.
ENDTRY.
TYPE_NOT_FOUND
是 not a class-based exception. You'll need to use the old syntax 并为每个异常分配一个非零值,然后检查 SY-SUBRC
该值是否再次出现。
我假设您需要类型转换,因此为此提供了一个额外的步骤。
此语法不如新语法优雅,但这是我编译您的示例的唯一方法:
data descr_ref1 type ref to cl_abap_typedescr.
call method cl_abap_typedescr=>describe_by_name(
exporting p_name = 'abc1'
receiving p_descr_ref = descr_ref1
exceptions type_not_found = 1 ).
if sy-subrc <> 0.
break-point.
else.
descr_ref0 ?= descr_ref1.
endif.
编辑:
你可以通过查看方法来判断使用了哪种类型的异常:
或者您可以在编辑器中使用 "Pattern" 命令来获得正确的语法。