Exception 如何捕获未分配的运行时错误DATREF\u?
在ABAP中是否可以使用TRY-catch子句捕获未分配的DATREF_ 未分配的DATREF属于ABAP编程错误类别,这意味着: ABAP程序中的错误,如被零除或未捕获的可捕获异常 问题:修改以下代码以捕获未分配的DATREF\u:Exception 如何捕获未分配的运行时错误DATREF\u?,exception,abap,Exception,Abap,在ABAP中是否可以使用TRY-catch子句捕获未分配的DATREF_ 未分配的DATREF属于ABAP编程错误类别,这意味着: ABAP程序中的错误,如被零除或未捕获的可捕获异常 问题:修改以下代码以捕获未分配的DATREF\u: data gv_i type ref to i. gv_i->*17. 此错误的简单处理方法是: data gv_i type ref to i. if gv_i is initial. gv_i = new #( ). endif. gv_i->
data gv_i type ref to i.
gv_i->*17.
此错误的简单处理方法是:
data gv_i type ref to i.
if gv_i is initial.
gv_i = new #( ).
endif.
gv_i->*17.
所需的解决方案将使用TRY-CATCH或其他构造来处理异常/错误。以下代码不起作用:
data gv_i type ref to i.
try.
gv_i->* = 17.
catch CX_ROOT.
gv_i = new #( ).
endtry.
您无法捕获未分配的DATREF\u 委员会确认: 如果数据引用变量包含空引用,则在使用解引用运算符时,将引发未分配的异常DATREF 使用
未绑定
检查空引用:
data gv_i type ref to i.
if gv_i is not bound.
gv_i = new #( ).
endif.
gv_i->*17.
您不能处理这样的异常,因为它纯粹是一个需要修复的编程错误 即使是
CATCH SYSTEM-EXCEPTIONS OTHERS=8
也无济于事
REPORT zzz.
START-OF-SELECTION.
DATA gv_i TYPE REF TO i.
CATCH SYSTEM-EXCEPTIONS OTHERS = 8.
gv_i->* = 17.
ENDCATCH.
IF sy-subrc <> 0.
gv_i = NEW #( ).
ENDIF.
报告zzz。
开始选择。
数据gv_i类型参考至i。
捕获系统异常-其他=8。
gv_i->*=17。
收尾。
如果sy subrc为0。
gv#u i=新的#()。
恩迪夫。
注意,如果gv_i为初始值,则使用的处理不会覆盖绑定数据被释放时的所有情况(引用将没有绑定数据,但引用也不是初始值)。如果gv_i未绑定,则使用进行处理
涵盖所有情况。