无法捕捉到某些例外情况

Flo*_*ian 6 abap try-catch

我在叫这个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.
Run Code Online (Sandbox Code Playgroud)

Est*_*sti 7

我假设您需要进行类型转换,因此为它提供了额外的步骤.

这种语法不如新语法那么优雅,但它是我可以编写示例的唯一方法:

  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. 
Run Code Online (Sandbox Code Playgroud)

编辑:

您可以通过查看该方法来判断使用哪种类型的异常:

在此输入图像描述

或者,您可以使用编辑器中的"Pattern"命令来获取正确的语法.


vwe*_*ert 5

TYPE_NOT_FOUND不是基于类的例外.您需要使用旧语法并为每个异常分配一个非零值,然后检查SY-SUBRC该值是否再次出现.