Finally

确保在 Try 语句完成之后总是执行一条或多条语句.

Finally Statement
Finally
{
    语句
}

备注

每次使用 Finally 都必须附属于(与之关联) 它上面的 Try 语句(在任何可选的 Tatch 和/或 Tlse 之后). Tinally 总是附属于它上面且离它最近的无主 Try 语句, 不过可以使用区块改变这种行为.

Try 语句的行为取决于 TatchTinally 是否存在. 有关详情, 请参阅 Try.

不能使用 Goto, Break, ContinueReturn 退出 Finally 区块, 因为这需要在 Try 区块里禁止任何控制流指令. 例如, 如果 Try 语句中使用 return 42, 值 42 将会在 Finally 区块执行后被返回. 如果使用上述语句之一来试图跳出 Finally 区块, 将会在加载时或运行时被检测为错误.

如果脚本被任何方式直接终止, 包括托盘菜单, ExitApp, Finally 语句不会被执行.

可以在 Finally 语句中使用 One True Brace(OTB) 样式. 例如:

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

try {
    ...
} catch {
    ...
} else {
    ...
} finally {
    ...
}

Try, Catch, Else, Throw, 区块

示例

详细演示 Finally 的行为.

try 
{
    ToolTip "Working..."
    Example1()
}
catch as e
{
    ; 关于 e 对象的更多细节, 请参阅 Error.
    MsgBox(Type(e) " thrown!`n`nwhat: " e.what "`nfile: " e.file
        . "`nline: " e.line "`nmessage: " e.message "`nextra: " e.extra,, 16)
}
finally
{
    ToolTip ; 隐藏工具提示
}

MsgBox "Done!"

; 此函数包含了清理代码的 Finally 区块
Example1()
{
    try
        Example2()
    finally
        MsgBox "This is always executed regardless of exceptions"
}

; 当系统分钟数为奇数时此函数执行会报错
Example2()
{
    if Mod(A_Min, 2)
        throw Error("That's odd...")
    MsgBox "Example2 did not fail"
}