【发布时间】:2012-03-06 21:17:28
【问题描述】:
查看 PoshCode 上的 Get-WebFile 脚本http://poshcode.org/3226,我注意到了这个奇怪的装置:
$URL_Format_Error = [string]"..."
Write-Error $URL_Format_Error
return
与以下相反的原因是什么?
$URL_Format_Error = [string]"..."
Throw $URL_Format_Error
甚至更好:
$URL_Format_Error = New-Object System.FormatException "..."
Throw $URL_Format_Error
据我了解,您应该将 Write-Error 用于非终止错误,将 Throw 用于终止错误,因此在我看来,您不应使用 Write-Error 后跟 Return。有区别吗?
【问题讨论】:
-
什么意思?如果 Write_error 允许脚本继续运行,那么在 Write-Error 之后有一个 return 语句是可以理解的。错误已被写出,您返回到最初调用该函数的代码。由于 Throw 用于终止错误,它会自动终止,因此 throw 声明中的 return 语句是无用的
-
@Gisli:重要的是要注意
return确实不返回到(高级)函数的process块中的调用者;相反,它继续到管道中的下一个输入对象。实际上,这是生成非终止错误的典型场景:如果仍然可以处理更多输入对象。 -
请注意,
Throw会生成一个 script 终止错误,这与触发的 statement 终止错误不同,例如,通过Get-Item -NoSuchParameter或1 / 0。
标签: powershell error-handling powershell-2.0