Programmausnahmen können nur automatisch vom jeweiligen Pascal-Laufzeitsystem behandelt werden.
Delphi
Der Anweisungsblock, für den Abschlußhandlungen garantiert werden sollen, wird wie folgt notiert:
TRY
anweisungsfolge_1 { Normalteil }
FINALLY
anweisungsfolge_2 { Abschlußteil }
END;
anweisungfolge_1 umfaßt die im Normalfall auszuführenden
Anweisungen.
Tritt bei der Abarbeitung einer Anweisung des Normalteils eine Ausnahme ein, so
werden alle nachfolgenden Anweisungen des dieses Teils übergangen.
Es ist jedoch garantiert, daß anweisungfolge_2 ausgeführt
wird.
In vielen Situationen ist es weniger wichtig1 festzustellen,
welche Ausnahme aufgetreten ist, da eine gezielte Behandlung der Ausnahme
nicht möglich ist. Statt dessen ist es aber wichtig, bestimmte
Abschlußhandlungen auszuführen, bevor das Programm in einen neuen
Programmabschnitt eintritt oder abbricht.
Solche Handlungen können z.B. sein:
Beispiel:
VAR f : TEXT;
AssignFile(f, 'dateiname');
Rewrite(f);
TRY
create_file(f);
FINALLY { Datei f wird geschlossen, auch nach dem }
CloseFile(f); { Auftreten von Ausnahmen in create_file }
END;
Die Ausführung von CloseFile kann sehr wichtig sein, da
alle bis zum Auftreten eines Fehlers erfolgten Ausgaben in die zu
erstellende Datei sonst verloren gehen können:
Geht es darum, sowohl Fehler des Laufzeitsystems abzufangen als auch
Abschlußhandlungen auszuführen, so müssen ein
TRY-EXCEPT-Block und ein TRY-FINALLY-Block miteinander
gekoppelt werden.
Dies geschieht durch Schachtelung: Der TRY-FINALLY-Block
schließt einen TRY-EXCEPT-Block ein.
Beispiel:
PROGRAM except;
USES SysUtils;
VAR f : TEXT;
x, y, z : REAL;
BEGIN
AssignFile(f, 'test.dat');
Rewrite(f);
TRY
x := ...; y := ...;
Writeln(f, 'x = ', x, ' y = ', y);
TRY
z := x/y;
Writeln(f, 'z = ', z);
EXCEPT
ON Exception DO
Writeln(f, 'z konnte nicht berechnet werden');
END;
FINALLY
CloseFile(f);
END;
END.
Pascal++
Spezielle Sprachmittel zur Ausführung von Abschlußhandlungen sind nicht vorgesehen.