Anweisung Try...Catch...Finally

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.

Anmerkung: Eine Try...Catch...Finally-Anweisung muss mindestens einen Catch-Block oder einen Finally-Block enthalten.

Catch-Klausel

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.

Finally-Klausel

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>]]

Beispiel

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.

Anmerkung: Weitere Informationen finden Sie unter Exit-Anweisung.