Try [v1.1.04+]

Schützt eine oder mehrere Anweisungen (Befehle oder Ausdrücke) vor Laufzeitfehlern und Ausnahmen, die vom Throw-Befehl ausgelöst werden.

Try Anweisung
Try
{
    Anweisungen
}

Bemerkungen

Nach dem Try-Befehl erfolgt üblicherweise ein Block - das sind eine oder mehrere Anweisungen (Befehle oder Ausdrücke), umschlossen von geschweiften Klammern. Verwendet man nur eine Anweisung, kann sie direkt neben Try gesetzt werden, oder darunter ohne geschweifte Klammern. Der Catch-Befehl kann genutzt werden, um Zeilen auszuführen, wenn Try einen Fehler erfasst.

Eine Ausnahme kann ausgelöst werden, wenn der throw-Befehl verwendet wird oder wenn das Programm einen Laufzeitfehler verursachen sollte. Wenn eine Ausnahme vom Inneren eines Try-Blocks ausgelöst oder wenn eine Funktion von so einem aufgerufen wird, passiert folgendes:

Laufen beim Auslösen einer Ausnahme gerade keine try-Blocks, wird eine Fehlermeldung angezeigt und der aktuelle Thread beendet.

Bei Bedarf kann der "One True Brace Style" beim Try-Befehl angewendet werden. Zum Beispiel:

try {
    ...
} catch e {
    ...
}

Siehe auch

Catch, Throw, Finally, Blöcke

Beispiele

; Beispiel #1: Das Grundkonzept von try/catch/throw.

try  ; Versucht, den Code auszuführen.
{
    HelloWorld()
    MakeToast()
}
catch e  ; Verarbeitet den ersten Fehler/Ausnahme, ausgelöst durch den vorherigen Block.
{
    MsgBox, Eine Ausnahme wurde ausgelöst!`nSpeziell: %e%
    Exit
}

HelloWorld()  ; Ist immer erfolgreich.
{
    MsgBox, Hello, world!
}

MakeToast()  ; Schlägt immer fehl.
{
    ; Springt sofort zur Fehlerbehandlung des Try-Blocks:
    throw A_ThisFunc " ist nicht implementiert, sorry"
}
; Beispiel #2: Verwendet try/catch anstelle von ErrorLevel.

try
{
    ; Nachfolgend wird versucht, bestimmte Dateitypen abzusichern:
    FileCopy, %A_MyDocuments%\*.txt, D:\Backup\Textdokumente
    FileCopy, %A_MyDocuments%\*.doc, D:\Backup\Textdokumente
    FileCopy, %A_MyDocuments%\*.jpg, D:\Backup\Fotos
}
catch
{
    MsgBox, 16,, Es trat ein Fehler beim Absichern der Dateien auf!
    ExitApp
}
; Beispiel #3: Umgang mit COM-Fehlern.

try
{
    obj := ComObjCreate("ScriptControl")
    obj.ExecuteStatement("MsgBox ""Das ist ein eingebettetes VBScript""")
    obj.InvalidMethod() ; Diese Zeile erzeugt einen Laufzeitfehler.
}
catch e
{
    ; Um mehr über das Objekt zu erfahren, das in e enthalten ist, siehe Exception().
    MsgBox, 16,, % "Ausnahme ausgelöst!`n`nWas: " e.what "`nDatei: " e.file
        . "`nZeile: " e.line "`nNachricht: " e.message "`nZusatz: " e.extra
}
; Beispiel #4: Verschachtelte Try-Catch-Anweisungen.

try Beispiel1() ; Jede Einzelanweisung kann auf derselben Zeile des Try-Befehls stehen.
catch e
    MsgBox, Beispiel1() hat "%e%" ausgelöst.

Beispiel1()
{
    try Beispiel2()
    catch e
    {
        if e = 1
            throw e ; Ausnahme wird nochmals ausgelöst, so dass der Aufrufer sie abfangen kann.
        else
            MsgBox, Beispiel2() hat "%e%" ausgelöst.
    }
}

Beispiel2()
{
    Random, o, 1, 2
    throw o
}