Durch Ausnahmebehandlungsanweisungen lassen sich der vorgegebene Fehlerbehandlungsmechanismus umgehen und die Reihenfolge der durch einen Fehler ausgelösten Aktionen steuern. In Intent erfolgt dies durch die Anweisung Try...Catch...Finally.
Eine Try-Klausel besteht aus einem einzelnen Try-Block gefolgt von einer beliebigen Anzahl optionaler Catch-Blöcke und einem einzelnen Finally-Block. Hier sehen Sie die Syntax einer einfachen Try...Catch...Finally-Anweisung:
Try [<statements>] [Catch [identifier] [<statements>]] [Finally [<statements>]] End Try
Die Anweisungen des Try-Blocks werden ausgeführt. Tritt während der Auswertung ein Fehler auf, so werden die Catch-Blöcke auf Übereinstimmung mit der Ausnahme überprüft. Stimmt ein Catch-Block mit der Ausnahme überein, so werden die Anweisungen in diesem Catch-Block ausgewertet. Beim Beenden eines Try- oder Catch-Blocks wird unabhängig davon, ob ein Fehler aufgetreten ist und behoben wurde, ein Finally-Block ausgeführt.
Wenn in einem Try-Block eine Ausnahme generiert wird, werden die Catch-Blöcke, sofern vorhanden, der Reihe nach untersucht, um festzustellen, ob einer davon für die Behandlung dieser Ausnahme geeignet ist. Nur die Anweisungen des ersten übereinstimmenden Catch-Blocks werden ausgeführt.
Syntax:
Catch [identifier] [<statements>]]
Die in einer Catch-Klausel angegebene Kennung bezeichnet das Design des fehlerhaften Bauteils, das vom Designfehler des Systems abgeleitet sein muss. Der Catch-Fehler stimmt daher mit jeder Ausnahme überein.
Ein Finally-Block wird beim Beenden eines Try-Blocks oder eines ausgewählten Catch-Blocks ausgeführt. Wenn ein oder mehrere Catch-Blöcke vorhanden sind, ist der Finally-Block optional.
Syntax:
[Finally [<statements>]]
Im folgenden Beispiel vergleicht eine Anweisung in einem Try-Block den Wert des Lastparameters mit einem Grenzwert. Wird der Grenzwert der Last nicht überschritten, so wird der Try-Block beendet, durch eine Anweisung des Finally-Blocks wird eine Systemmeldung ausgegeben und die Schleife wird wiederholt. Bei einer Überschreitung des Grenzwerts wird eine Ausnahme generiert und die Programmausführung wird angehalten. Vor dem Anhalten der Programmausführung gibt jedoch eine Anweisung des Catch-Blocks eine Systemmeldung aus.
Parameter Rule unitWeight As Integer = 5 Rule load As Number Dim counter As Integer = 1 Dim limit As Number = 25.0 Dim strItem As String = " item." Do If counter > 1 Then strItem = " items." End If load = load + unitWeight Try If load > limit Then Error() End If Catch Error printValue("ERROR: Load limit exceeded! Load = " + stringValue(load) + _ "kg. Program execution halted.") Error("ERROR: Load limit exceeded!", " Load = " + stringValue(load) + _ "kg for " + stringValue(counter) + strItem + " " + _ stringValue(limit) + "kg limit exceeded!") Finally If load <= limit Then printValue("Load = " + stringValue(load) + _ "kg for " + stringValue(counter) + strItem) End If End Try counter = counter + 1 Loop Until counter > 10 End Rule
Eine Try...Catch-Anweisung kann durch eine Exit-Anweisung beendet werden.