Try...Catch...Finally-Anweisung (Visual Basic)
Aktualisiert: November 2007
Bietet eine Möglichkeit, einige oder alle möglichen Fehler zu behandeln, die in einem bestimmten Codeblock auftreten können, während dieser Code noch ausgeführt wird.
Try
[ tryStatements ]
[ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
[ catchStatements ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ finallyStatements ] ]
End Try
Bestandteile
tryStatements
Optional. Anweisungen, in denen ein Fehler auftreten kann. Hierbei kann es sich um eine zusammengesetzte Anweisung handeln.Catch
Optional. Mehrere Catch-Blöcke sind zulässig. Wenn beim Verarbeiten des Try -Blocks eine Ausnahme auftritt, wird jede Catch-Anweisung in Textreihenfolge überprüft, um festzustellen, ob sie die Ausnahme behandelt, wobei exception die ausgelöste Ausnahme darstellt.exception
Optional. Ein beliebiger Variablenname. Der Anfangswert von exception ist der Wert des ausgelösten Fehlers. Wird mit Catch zur Angabe des abgefangenen Fehlers verwendet. Wenn keine Angabe erfolgt, fängt die Catch-Anweisung alle Ausnahmen ab.type
Optional. Gibt den Typ des Klassenfilters an. Wenn der Wert von exception dem von type angegebenen Typ oder einem abgeleiteten Typ entspricht, wird der Bezeichner an das Ausnahmeobjekt gebunden.When
Optional. Eine Catch-Anweisung mit einer When-Klausel fängt nur Ausnahmen ab, wenn expressionTrue ergibt. Eine When-Klausel wird nur angewendet, nachdem der Typ der Ausnahme überprüft wurde. expression kann auf den Bezeichner verweisen, der die Ausnahme darstellt.expression
Optional. Muss implizit nach Boolean konvertierbar sein. Ein beliebiger Ausdruck, der einen allgemeinen Filter beschreibt. Dieses Argument wird meist zum Filtern nach Fehlernummern verwendet. Wird mit dem When-Schlüsselwort zur Angabe der Umstände, unter denen der Fehler abgefangen wurde, verwendet.catchStatements
Optional. Anweisung(en) zur Behandlung von Fehlern, die im zugeordneten Try-Block auftreten. Hierbei kann es sich um eine zusammengesetzte Anweisung handeln.Exit Try
Optional. Schlüsselwort zum Ausscheren aus der Try...Catch...Finally-Struktur. Die Ausführung wird mit dem Code fortgesetzt, der direkt auf die End Try-Anweisung folgt. Die Finally-Anweisung wird weiterhin ausgeführt. In Finally-Blöcken nicht zulässig.Finally
Optional. Ein Finally-Block wird immer ausgeführt, wenn die Ausführung außerhalb eines beliebigen Teils der Try-Anweisung erfolgt.finallyStatements
Optional. Anweisungen, die ausgeführt werden, nachdem die gesamte übrige Fehlerbehandlung erfolgt ist.End Try
Beendet die Try...Catch...Finally-Struktur.
Hinweise
Lokale Variablen aus einem Try-Block sind in einem Catch-Block nicht verfügbar, weil es sich um eigene Blöcke handelt. Wenn Sie eine Variable in mehreren Blöcken verwenden möchten, deklarieren Sie die Variable außerhalb der Try...Catch...Finally-Struktur.
Der Try-Block enthält Code, in dem ein Fehler auftreten kann, während der Catch-Block Code zur Behandlung eines beliebigen auftretenden Fehlers enthält. Wenn ein Fehler im Try-Block auftritt, wird die Programmsteuerung an die entsprechende Catch-Anweisung übergeben. Das exception-Argument ist eine Instanz der Exception-Klasse oder eine von der Exception-Klasse abgeleitete Klasse. Die Exception-Klasseninstanz entspricht dem im Try-Block aufgetretenen Fehler. Die Instanz enthält Informationen über den Fehler. Dies umfasst u. a. die Nummer und die Fehlermeldung.
Wenn in einer Catch-Anweisung kein exception-Argument angegeben ist, werden alle Arten von System- oder Anwendungsausnahmen abgefangen. Sie sollten diese Einstellung immer im letzten Catch-Block in der Try...Catch...Finally-Struktur verwenden, nachdem alle vorhergesehenen spezifischen Ausnahmen abgefangen wurden. Die Ablaufsteuerung kann einen Catch-Block, der auf einen Catch ohne exception-Argument folgt, niemals erreichen.
In teilweise vertrauenswürdigen Kontexten, z. B. in einer Anwendung, die auf einer Netzwerkfreigabe bereitgestellt wird, fängt Try...Catch...Finally keine Sicherheitsausnahmen ab, die vor dem Aufrufen der den Aufruf enthaltenden Methode auftreten. Wenn der Code im folgenden Beispiel auf einer Serverfreigabe bereitgestellt und von dort ausgeführt wird, wird der Fehler "System.Security.SecurityException: Fehler bei der Anforderung" ausgelöst. Weitere Informationen über Sicherheitsausnahmen finden Sie in der SecurityException-Klasse.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Try
Process.Start("https://www.microsoft.com")
Catch ex As Exception
MsgBox("Can't load Web page" & vbCrLf & ex.Message)
End Try
End Sub
In einem solchen teilweise vertrauenswürdigen Kontext müssen Sie die Process.Start-Anweisung in eine eigene Sub einfügen. Der ursprüngliche Aufruf von Sub schlägt fehl. Dies ermöglicht Try...Catch die Ausnahme abzufangen, bevor die Sub, die Process.Start enthält, gestartet und die Sicherheitsausnahme ausgelöst wird.
Hinweis: |
---|
Wenn die Try-Anweisung nicht mindestens einen Catch-enthält, muss sie einen Finally-Block enthalten. |
Beispiel
Im folgenden Beispiel wird die Struktur der Try...Catch...Finally-Anweisung veranschaulicht.
Public Sub TryExample()
Dim x As Integer = 5 ' Declare variables.
Dim y As Integer = 0
Try ' Set up structured error handling.
x = x \ y ' Cause a "Divide by Zero" error.
Catch ex As Exception When y = 0 ' Catch the error.
Beep()
MsgBox("You tried to divide by 0.") ' Show an explanatory message.
Finally
Beep() ' This line is executed no matter what.
End Try
End Sub