Because CX_ROOT
is the base exception type, catching it directly probably casts a wider net than you intended. Catching
CX_ROOT
could mask far more serious system errors that your CATCH
logic was intended to deal with.
Some smaller, more specific exception type should be caught instead.
Noncompliant code example
try.
if ABS( NUMBER ) > 100.
write / 'Number is large'.
endif.
catch CX_ROOT into OREF.
write / OREF->GET_TEXT( ).
endtry.
Compliant solution
try.
if ABS( NUMBER ) > 100.
write / 'Number is large'.
endif.
catch CX_SY_ARITHMETIC_ERROR into OREF.
write / OREF->GET_TEXT( ).
endtry.