ABAP Keyword Documentation → ABAP − Reference → Obsolete Language Elements → Obsolete Program Flow → Obsolete Catchable Runtime Errors
CATCH SYSTEM-EXCEPTIONS
Other versions: 7.31 | 7.40 | 7.54
Obsolete Syntax
CATCH SYSTEM-EXCEPTIONS [exc1 = n1 exc2 = n2...]
[OTHERS = n_others]. [statement_block]
ENDCATCH.
Effect
Handling Catchable
Runtime Errors. The statement CATCH SYSTEM-EXCEPTIONS
introduces a control
structure containing a statement block statement_block
that is always processed. In the list exc1 = n1 exc2 = n2 ...
,
catchable runtime errors and
exception groups can
be specified in any order. A directly specified number n1 n2 ...
must be assigned to each of them.
The OTHERS
addition can be executed independently or after the list
exc1 = n1 exc2 = n2 .... Its effect is the same as specifying an exception group that includes all catchable runtime errors of the runtime environment.
The system handles the CATCH
control structure as follows:
-
If one of the specified catchable runtime errors or a catchable runtime error contained in the specified
exception groups occurs, the execution of the
statement block
is immediately terminated, the program continues after the statementENDCATCH
, and the numbern1 n2 ...
assigned to the catchable runtime error or the exception group, is stored for evaluation in the system fieldsy-subrc
. If the list contains a catchable runtime error and its exception group or if a catchable runtime error occurs in some of the specified exception groups,sy-subrc
contains the assigned number of the first position in the list.
-
If a catchable runtime error that is not specified in the statement
CATCH SYSTEM-EXCEPTIONS
or is not contained in one of the specified exception groups occurs in the statement block, the program terminates with a short dump
-
If the end of the statement block is reached and no runtime error occurs,
sy-subrc
is set to 0.
A CATCH
control structure cannot be defined in the same
processing block,
in which the class-based exceptions are handled in a TRY
control structure or are raised by the statement
RAISE EXCEPTION or by the addition THROW
in a
conditional expression.
Notes
-
Catchable runtime errors are not passed from called
procedures to the caller.
They can only be caught within a processing block. Within a processing block, catchable runtime errors
are caught in control structures that can be nested in any depth. If multiple
CATCH
control structures are nested, the system branches behind theENDCATCH
statement of the innerCATCH
control structure that handles the runtime error. -
The handling of catchable runtime errors using
CATCH SYSTEM-EXCEPTIONS
is obsolete and should be replaced by aTRY
control structure. Since class-based exceptions are assigned to all catchable runtime errors, this is possible without restriction. The class-based exceptions can also be passed from a procedure usingRAISING
, as well as by usingTRY
.
Example
Catches all possible catchable runtime errors in a statement block. Catchable runtime errors of the
exception group ARITHMETIC_ERRORS set sy-subrc
to 4, all other catchable
runtime errors set sy-subrc
to 8. The division by 0 causes the catchable
runtime error COMPUTE_INT_ZERODIVIDE, which is contained in the exception group ARITHMETIC_ERRORS. In this case, sy-subrc
is also set to 4.
DATA: result TYPE i,
number TYPE i.
CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 4
OTHERS = 8.
...
result = 1 / number.
...
ENDCATCH.
IF sy-subrc <> 0.
...
ENDIF.