Finally [v1.1.14+]

Stellt sicher, dass nach Abschluss einer Try-Anweisung immer eine oder mehrere Anweisungen ausgeführt werden.

Finally Anweisung
Finally
{
    Anweisungen
}

Bemerkungen

Jedes Finally muss zu einem darüber liegenden Try oder Catch gehören (mit ihm verbunden sein). Ein Finally bezieht sich immer auf das nächstmögliche unbeanspruchte Try über ihm, es sei denn, ein Block wurde verwendet, um dieses Verhalten zu ändern.

Das Verhalten von Try hängt davon ab, ob ein Catch oder Finally vorhanden ist. Weitere Informationen finden Sie unter Try.

Goto, Break, Continue und Return können nicht verwendet werden, um einen Finally-Block zu verlassen, da sonst jegliche Kontrollanweisungen innerhalb eines Try-Blocks unterdrückt werden müssten. Wenn Try beispielsweise return 42 verwendet, wird der Wert 42 erst nach der Ausführung des Finally-Blocks zurückgegeben. Der Versuch, mit einer dieser Anweisungen aus einem Finally-Block herauszuspringen, wird als Fehler erkannt, wenn das Skript geladen wird, sofern möglich, andernfalls während der Skriptausführung.

Vor [v1.1.19.02] existierte ein Bug, der Kontrollanweisungen daran hinderte, innerhalb von Try zu funktionieren, wenn Finally vorhanden war. Return war fälschlicherweise in Finally erlaubt, wurde aber ignoriert, wenn eine Ausnahme ausgelöst wurde.

Finally-Anweisungen werden nicht ausgeführt, wenn das Skript direkt terminiert wird, z.B. über das Tray-Menü, ExitApp oder Exit (wenn das Skript nicht persistent ist). Wenn jedoch nur der aktuelle Thread beendet wird (nicht das gesamte Skript), werden Finally-Anweisungen ausgeführt.

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

try {
    ...
} finally {
    ...
}

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

Try, Catch, Throw, Blöcke

Beispiele

Zeigt detailliert das Verhalten von Finally.

try
{
    ToolTip, Bearbeite ...
    Beispiel1()
}
catch e
{
    ; Um mehr über das Objekt zu erfahren, das in e enthalten ist, siehe Catch.
    MsgBox, 16,, % "Ausnahme ausgelöst!`n`nWas: " e.what "`nDatei: " e.file
        . "`nZeile: " e.line "`nNachricht: " e.message "`nZusatz: " e.extra
}
finally
{
    ToolTip ; Versteckt den Tooltip
}

MsgBox, Fertig!

; Diese Funktion hat einen Finally-Block, der als Aufräumcode fungiert
Beispiel1()
{
    try
        Beispiel2()
    finally
        MsgBox, Dies wird immer ausgeführt, unabhängig von Ausnahmen
}

; Diese Funktion schlägt fehl, wenn die Minuten ungerade sind
Beispiel2()
{
    if Mod(A_Min, 2)
        throw Exception("Test-Ausnahme")
    MsgBox, Beispiel2 ist nicht fehlgeschlagen
}