需要try-catch-finally的例子,最后是必须的

时间:2017-01-13 21:46:16

标签: powershell scripting

我需要一个使用try..catch..finally子句的示例,其中finally NECESSARY vs try..catch子句,其中finally是可选的。下面的示例仅演示了finally是可选的,因为无论有没有它,它都不会对我的输出产生任何不同。

我的示例(注意:$ErrorActionPreferenceContinue):

try {
    $value = 5 / 0 
} catch {
    Write-Output "illegal operation"
}
$t = Get-Date
Write-Output ("operation is done at " + "$t")

原因是我需要知道finally子句变得必要,而不管是什么,只需要放finally子句。

1 个答案:

答案 0 :(得分:1)

finally子句只是一个逻辑结构,说“无论是否存在错误,都应该在try块的末尾运行此语句或语句组”。它告诉读取代码的人,tryfinally块中的代码之间存在逻辑连接(例如,打开和关闭数据库连接)。然而,除此之外,

之间没有本质的区别
try {
    5 / 0 
} catch {
    'illegal operation'
}
'continued'

try {
    5 / 0 
} catch {
    'illegal operation'
} finally {
    'continued'
}

您可以找到关于主题here的一些讨论。

我认为唯一可能产生影响的方法是,如果您在try区块中退回或退出:

try {
    'foo'    # <-- displayed
    exit
} finally {
    'bar'    # <-- displayed
}
'baz'        # <-- not displayed

但也许这样的事情只是糟糕的设计。