Try [v1.1.04+]

Schützt eine oder mehrere Anweisungen vor Laufzeitfehlern und via Throw ausgelöste Ausnahmen.

Try Anweisung
Try
{
    Anweisungen
}

Bemerkungen

Nach einem Try erfolgt üblicherweise ein Block (eine oder mehrere Anweisungen, die von geschweiften Klammern umschlossen sind). Wenn nur eine einzige Anweisung verwendet wird, kann diese direkt neben Try gesetzt werden, oder darunter ohne geschweifte Klammern. Um Code anzugeben, der nur ausgeführt wird, wenn Try einen Fehler abfängt, verwenden Sie Catch.

Eine Ausnahme kann entweder mit Throw oder durch das Programm beim Auftreten eines Laufzeitfehlers ausgelöst werden. Wenn eine Ausnahme innerhalb eines Try-Blocks oder einer Funktion, die von einem solchen Block aufgerufen wird, ausgelöst wird, geschieht Folgendes:

Wenn eine Ausnahme ausgelöst wird, während keine Try-Blöcke ausgeführt werden, wird eine Fehlermeldung angezeigt und der aktuelle Thread beendet.

Je nach Bedarf kann der One True Brace (OTB) Style bei einem Try verwendet werden. Zum Beispiel:

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

Catch, Throw, Finally, Blöcke, OnError()

Beispiele

Zeigt das Grundkonzept von Try-Catch und Throw.

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

HalloWelt()  ; Ist immer erfolgreich.
{
    MsgBox, Hallo, Welt!
}

MacheToast()  ; Schlägt immer fehl.
{
    ; Sofort zur Fehlerbehandlung des Try-Blocks springen:
    throw A_ThisFunc " ist nicht implementiert, sorry"
}

Zeigt die Verwendung von Try-Catch anstelle von ErrorLevel.

try
{
    ; Nachfolgend wird versucht, bestimmte Dateitypen zu sichern:
    FileCopy, %A_MyDocuments%\*.txt, D:\Backup\Textdokumente
    FileCopy, %A_MyDocuments%\*.doc, D:\Backup\Textdokumente
    FileCopy, %A_MyDocuments%\*.jpg, D:\Backup\Fotos
}
catch
{
    MsgBox, 16,, Beim Sichern der Dateien ist ein Fehler aufgetreten!
    ExitApp
}

Zeigt die Verwendung von Try-Catch bei COM-Fehlern. Einzelheiten über das hier verwendete COM-Objekt finden Sie unter Using the ScriptControl (Microsoft Docs).

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

Zeigt verschachtelte Try-Catch-Anweisungen.

try Beispiel1() ; Einzelanweisungen können neben dem Try stehen.
catch e
    MsgBox, Beispiel1() hat "%e%" ausgelöst.

Beispiel1()
{
    try Beispiel2()
    catch e
    {
        if (e = 1)
            throw e ; Ausnahme erneut auslösen, damit der Aufrufer sie abfangen kann.
        else
            MsgBox, Beispiel2() hat "%e%" ausgelöst.
    }
}

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