【发布时间】:2019-12-28 21:35:42
【问题描述】:
Try/Catch 仅适用于终止异常,对吗?这表明 1/0 是一个终止错误。
try { 1/0 } catch { 'term' }
term
但是如果我在脚本中运行以下代码,脚本会继续运行,所以 1/0 不是真的终止了吗?我认为如果 1/0 终止,'hi' 将永远不会打印:
1/0
'hi'
返回:
Attempted to divide by zero.
At C:\users\admin\test.ps1:1 char:1
+ 1/0
+ ~~~
+ CategoryInfo : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException
hi
编辑:
请参阅 Mark Wragg 以“考虑一个语句...”开头的评论,了解什么是“语句终止”异常。基本上,一个命令中的代码不会完成,但脚本的其余部分会完成。
【问题讨论】:
-
试试
try { 1/0;'hi' } catch { 'term' }。你的$ErrorActionPreference是什么? -
我看不到您的示例中失败的地方,并且无法复制。
-
@TheIncorrigible1 我认为如果 1/0 终止,'hi' 将永远不会打印。
-
考虑一个语句(例如你运行的任何命令)有它自己的内部代码。显然 0/1 是一个非常简单的例子,但
Get-ChildItem会做很多事情。如果Get-ChildItem返回了一个非终止错误,则说明出了问题,但它会继续它必须做的任何其他事情。如果它有一个导致语句终止错误的问题,那么Get-ChildItem将停止它的工作,但允许脚本继续(例如,任何进一步的命令将运行)。如果Get-ChildItem出现导致脚本终止错误的问题,则脚本将在该错误后停止。
标签: powershell exception try-catch