【问题标题】:Where to catch exception?在哪里捕获异常?
【发布时间】:2015-02-13 20:49:36
【问题描述】:

我有类似的东西

C:\Scripts\Lib\Web\web.ps1

C:\Scripts\Tasks\Task1\task1.ps1

task1.ps1 看起来像

. .\Lib\Web\web.ps1

Load-Url "http://server" "username" "password"

web.ps1 看起来像

function Load-URL([string] $url, [string] $username, [string] $password)
{
  $pwd = ConvertTo-SecureString $password -AsPlainText -Force
  $cred = New-Object Management.Automation.PSCredential ($username, $pwd)

  $result = irm $url -cred $cred    
  return $result
}

try/catch 是否会因 irm 调用而产生异常,这与 Load-URL 函数或调用者task1.ps1?我将其作为调用者的关注点,以便它可以决定异常在其上下文中的含义。它可能想要记录或做一些完全不同的事情。有没有相反的看法?

【问题讨论】:

    标签: powershell try-catch


    【解决方案1】:

    Load-Url 大概对如何处理Invoke-RestMethod 抛出的某些异常有更好的理解。如果Load-Url 可以以增加价值的方式处理其中一些,那么您应该在Load-Url 中处理try/catch,并处理那些特定的异常

    有时,在多种情况下都会引发相同的异常类,您必须检查catch 块中的异常对象。如果是这种情况,并且您不想处理其中一些异常,那么您可以重新throw 异常:

    try {
        Invoke-RestMethod #arguments
    } catch [Some.Generic.Net.Exception] {
        if ($_.Message -like '*Authentication*') {
            # Fix the issue here
        } else {
            throw $_
        }
    }
    

    然后,当调用者将其对 Load-Url 的调用包装在 try/catch 中时,它将能够捕获该函数未处理的任何异常。

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 2018-04-03
      • 2020-01-11
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多