try…catch…finally (JScript) #
Die Anweisung „try…catch…finally“ (=versuchen…fangen…zum Schluss) erlaubt es, auf Fehler in einer strukturierten Art und Weise zu reagieren.
Scriptcode, der einen Laufzeitfehler verursachen kann, wird ein eine try-catch-Anweisung eingekleidet. Tritt innerhalb des try-Blocks ein Laufzeitfehler auf, so wird dieser nicht durch das Laufzeitsystem angezeigt, sondern es wird in den catch-Block verzweigt. Dieser kann nun die genauere Fehlerursache prüfen und darauf reagieren.
Der finally-Block wird, wenn er vorhanden ist, in jedem Fall ausgeführt. Hierbei spielt es keine Rolle, ob in dem try-Block ein Fehler aufgetreten ist oder nicht. Die einzige Ausnahme besteht dann, wenn ein Fehler auftritt, aber gar kein catch-Block vorhanden ist. In diesem Fall wird ein normaler Laufzeitfehler ausgegeben.
Syntax #
try
{tryAnweisungen}
catch(Variable)
{catchAnweisungen}
finally
{finallyAnweisungen}
Beispiel 1 #
Ein Beispiel für try…catch.
var
Gestern, Morgen, Heut;
Heut=3;
try
{
Gestern=Heut-1;
Morgen=Heute+1;
}
catch (e)
{
Ergebnis="Fehler bei Zuweisung! Grund: "+e
}
In diesem Beispiel wird im try-Block eine Zuweisung „Morgen=Heute+1“ durchgeführt. Aufgrund eines Tippfehlers ist aber die Variable „Heute“ nicht definiert. Normalerweise würde in diesem Fall ein Objekt-Fehler gemeldet. Da aber die Anweisung in einem try-Block ausgeführt wird, verzweigt die Ausführung in den catch-Block. Dort wird ein Fehlertext der Ergebnisvariablen zugewiesen.
Der Original-Fehlertext ist in der Variablen „e“ enthalten und wird an die Ergebnisvariable angehängt.
Da der Fehler im try-Block erst in der zweiten Blockzeile aufgetreten ist, wird die Zeile „Gestern=Heut-1“ noch korrekt ausgeführt.
Beispiel 2 #
Ein einfaches Beispiel für try…catch..finally.
var
Gestern, Morgen, Heut;
Heut=3;
try
{
Gestern=Heut-1;
Morgen=Heute+1;
}
catch (e)
{
Ergebnis="Fehler bei Zuweisung! Grund: "+e
}
finally
{
Heut=1;
}
Dies ist eine Erweiterung zum ersten Beispiel. Am Ende der Ausführung des try…catch wird der finally-Block ausgeführt. Dieser setzt die Variable „Heut“ in jedem Fall auf den Wert 1. Egal ob im try-Block ein Fehler aufgetreten ist, oder nicht.
Beispiel 3 #
Ein einfaches Beispiel für try…finally.
var
Gestern, Morgen, Heut;
Heut=3;
try
{
Gestern=Heut-1;
Morgen=Heute+1;
}
finally
{
Heut=1;
}
Hier wird der finally-Block als einzige Ausnahme nicht ausgeführt. Da im try-Block ein Fehler auftritt, aber kein catch-Block vorhanden ist, wird das Script direkt an der Fehlerstelle abgebrochen und ein Laufzeitfehler angezeigt.