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关于“声明终止”异常是什么的注释,该注释以“考虑该语句...”开头。基本上,一个命令中的代码不会完成,但脚本的其余部分会完成。
最佳答案
GitHub issue提供的TheIncorrigible1会为您提供所需的答案。
在PowerShell中似乎有两种类型的终止错误:
还有非终止错误。
我的理解是,当发生非终止错误时,当前语句会输出错误,但会继续执行。发生语句终止错误时,将输出错误并终止该语句,但是脚本随后将继续执行任何其他语句。发生脚本终止错误时,脚本将在该错误处停止。
1/0
是一个语句终止错误,因此它会在catch
.. try
中触发catch
(其中不会出现非终止错误),但不会停止脚本执行。Throw
创建脚本终止错误。看来,如果您设置
$ErrorActionPreference = Stop
,则语句终止错误将变为脚本终止错误。例:
$ErrorActionPreference = 'Stop'
1/0
'hi'
结果:
1/0
'hi'
Attempted to divide by zero.
At line:4 char:1
+ 1/0
+ ~~~
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RuntimeException
~>
关于powershell - 尝试仅在终止异常时起作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57628340/