Anfang des Inhaltsbereichs

Abfangbare Laufzeitfehler Dokument im Navigationsbaum lokalisieren

Fehlersituationen der Laufzeitumgebung, die sinnvoll im Programm behandelbar waren, wurden vor Release 6.10 als abfangbare Laufzeitfehler behandelt. Abfangbare Laufzeitfehler sind bestimmten ABAP-Anweisungen zugeordnet und werden von der Laufzeitumgebung bei Fehlern in einer ABAP-Anweisung ausgelöst.

Die Behandlung von abfangbaren Laufzeitfehlern mit CATCH SYSTEM-EXCEPTIONS erfolgt über den Namen des Laufzeitfehlers. Um semantisch zusammengehörige Laufzeitfehler über einen gemeinsamen Namen abfangen zu können, sind sie in Ausnahme-Gruppen zusammengefaßt,

Abfangbare Laufzeitfehler können mit folgenden Kontroll-Anweisungen im ABAP-Programm behandelt werden:

CATCH SYSTEM-EXCEPTIONS <exc1> = <rc 1> ... <exc n> = <rc n>.
  ...
ENDCATCH.

Die Ausdrücke <exci> bezeichnen entweder einen abfangbaren Laufzeitfehler oder den Namen einer Ausnahmegruppe. Die Ausdrücke <rc i> sind Zahlenliterale. Wenn in dem Anweisungsblock zwischen CATCH und ENDCATCH einer der angegebenen Laufzeitfehler auftritt, wird das Programm nicht abgebrochen, sondern direkt zu ENDCATCH gesprungen. Nach ENDCATCH steht der dem Laufzeitfehler zugeordnete Zahlenwert <rc i> im Feld SY-SUBRC als Rückgabewert zur Verfügung. Der Inhalt der bei einer fehlerhaften Anweisung beteiligten Felder ist nach ENDCATCH nicht garantiert.

CATCH-Kontrollstrukturen werden wie IF-Kontrollstrukturen behandelt. D.h. sie sind beliebig tief schachtelbar, können aber nur innerhalb eines Verarbeitungsblocks angelegt werden. Weiterhin fangen CATCH-Kontrollstrukturen nur die Laufzeitfehler der aktuellen Aufrufebene ab und nicht die aufgerufener Prozeduren.

Da Ausnahmen seit Release 6.10 generell klassenbasiert behandelt werden, ist jedem abfangbaren Laufzeitfehler eine vordefinierte Ausnahmeklasse zugeordnet. Dabei wurden die Ausnahme-Gruppen prinzipiell den abstrakten Zwischenklassen in der Vererbungshierarchie der zugeordneten Ausnahmeklassen zugeordnet. Die vordefinierten Ausnahmeklassen folgen der Namenskonvention CX_SY_... wie z.B. CX_SY_ZERODIVIDE. Eine Übersicht über die Hierarchie der vordefinierten Ausnahmeklassen finden Sie in der ABAP-Schlüsselwortdokumentation.

Über die vordefinierten Ausnahmeklassen kann ein abfangbarer Laufzeitfehler wie alle behandelbaren Ausnahmen zwischen den Anweisungen TRY ... ENDTRY mit der Anweisung CATCH abgefangen werden. Dies ist die bevorzugte Methode. Die parallele Behandlung mit TRY ... ENDTRY und CATCH ... ENDCATCH innerhalb eines Verarbeitungsblocks ist verboten. Für die Zukunft ist geplant, keine neuen abfangbaren Laufzeitfehler mehr einzuführen, sondern Ausnahmen in ABAP-Anweisungen nur noch durch die Zuordnung von Ausnahmeklassen behandelbar zu machen.

Beispiel

REPORT demo_catch_endcatch.

DATA: result TYPE p DECIMALS 3,
      number TYPE i VALUE 11.

CATCH SYSTEM-EXCEPTIONS arithmetic_errors = 5.
  DO.
    number = number - 1.
    result = 1 / number.
    WRITE: / number, result.
  ENDDO.
ENDCATCH.

SKIP.

IF sy-subrc = 5.
  WRITE / 'Division by zero!'.
ENDIF.

Das Programm berechnet zehnmal den Quotienten aus 1 und NUMBER bis der abfangbare Laufzeitfehler BCD_ZERODIVIDE auftritt. Dieser Laufzeitfehler gehört zur Ausnahme-Gruppe ARITHMETIC_ERRORS und wird über diese abgefangen.

Ende des Inhaltsbereichs