无法捕捉到某些例外情况

时间:2015-06-02 13:38:06

标签: try-catch abap

我正在调用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.

2 个答案:

答案 0 :(得分: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. 

编辑:

您可以通过查看方法来确定使用哪种类型的例外:

enter image description here

或者您可以使用&#34;模式&#34;编辑器中的命令以获得正确的语法。

答案 1 :(得分:5)

TYPE_NOT_FOUNDnot a class-based exception。您需要使用old syntax并为每个例外指定一个非零值,然后检查SY-SUBRC是否再次出现该值。