.net 在try,catch块中使用for循环?
我正在尝试了解Powershell中的异常处理,更具体地说,如何在操作失败时使用for循环重试操作 我有下面的代码,它捕获异常,但只尝试for循环的一次迭代 我在for循环中是否做错了什么?或者这是catch块不处理循环的行为吗.net 在try,catch块中使用for循环?,.net,powershell,.net,Powershell,我正在尝试了解Powershell中的异常处理,更具体地说,如何在操作失败时使用for循环重试操作 我有下面的代码,它捕获异常,但只尝试for循环的一次迭代 我在for循环中是否做错了什么?或者这是catch块不处理循环的行为吗 try{ Copy-Item "C:\Path\To\Source.file" "C:\Path\To\Destination.file" -Force -ErrorAction Stop } catch{ $e = $_
try{
Copy-Item "C:\Path\To\Source.file" "C:\Path\To\Destination.file" -Force -ErrorAction Stop
}
catch{
$e = $_.Exception.GetType().Name
LogWrite $e
if($e -eq 'IOException')
{
for($i=0; $i -lt 6; $i++)
{
LogWrite "Waiting..."
Start-Sleep -s 10
LogWrite "Copying in the file attempt $i"
Copy-Item "C:\Path\To\Source.file" "C:\Path\To\Destination.file" -Force
}
}
}
您希望将
try
/catch
放在循环构造中。这里有一种方法可以做到这一点:
$i = 0
$done = $False
while(-not ($done) -and ($i -lt 6))
{
try{
Copy-Item "C:\Path\To\Source.file" "C:\Path\To\Destination.file" -Force -ErrorAction Stop
$done = $True
}
catch{
$e = $_.Exception.GetType().Name
LogWrite $e
if($e -eq 'IOException')
{
LogWrite "Waiting..."
Start-Sleep -s 10
LogWrite "Copying in the file attempt $i"
$i = $i + 1
}
else
{
$i = 6
}
}
}
在当前尝试中,第二个复制项
不包含在try
块中,catch
块仅捕获在其相应try
块中发生的异常
(如果
$i
达到6,则可能需要在循环后执行某些操作,例如报告遇到不可恢复的错误)要将try
/catch
放在循环构造内部。这里有一种方法可以做到这一点:
$i = 0
$done = $False
while(-not ($done) -and ($i -lt 6))
{
try{
Copy-Item "C:\Path\To\Source.file" "C:\Path\To\Destination.file" -Force -ErrorAction Stop
$done = $True
}
catch{
$e = $_.Exception.GetType().Name
LogWrite $e
if($e -eq 'IOException')
{
LogWrite "Waiting..."
Start-Sleep -s 10
LogWrite "Copying in the file attempt $i"
$i = $i + 1
}
else
{
$i = 6
}
}
}
在当前尝试中,第二个复制项
不包含在try
块中,catch
块仅捕获在其相应try
块中发生的异常
(如果
$i
已达到6,则可能需要在循环后执行某些操作,例如报告遇到不可恢复的错误)$e-eq'IOException'
为false。您所看到的“1迭代”是LogWrite$e
。感谢您的回复,我想我理解您的意思,如果异常不是“IOException”,它在我的检查中返回false,因此不会在for循环中执行代码。我使用了下面答案中的代码,因为逻辑对于这个场景来说更有意义,但我仍然希望它在$e-eq'IOException'为真时执行for循环5次。也为帮助干杯<代码>$e-eq“IOException”获取false。您所看到的“1迭代”是LogWrite$e
。感谢您的回复,我想我理解您的意思,如果异常不是“IOException”,它在我的检查中返回false,因此不会在for循环中执行代码。我使用了下面答案中的代码,因为逻辑对于这个场景来说更有意义,但我仍然希望它在$e-eq'IOException'为真时执行for循环5次。也为帮助干杯!干杯,伙计,这更有意义。还有+表示完成,因为我想知道如何在成功后退出或继续尝试。我将试一试这段代码,看看我是否可以扩展它。只是澄清一下,我的原始代码仍然应该迭代for循环的每个计数,但是如果它在尝试一时抛出异常,它将退出for循环并继续?很抱歉把事情弄糊涂了,我只是想知道为什么即使在我捕获了原始异常之后,它也不计算超过索引0的值。Powershell非常棒。干杯,伙计,这更有意义。还有+表示完成,因为我想知道如何在成功后退出或继续尝试。我将试一试这段代码,看看我是否可以扩展它。只是澄清一下,我的原始代码仍然应该迭代for循环的每个计数,但是如果它在尝试一时抛出异常,它将退出for循环并继续?很抱歉把事情弄糊涂了,我只是想知道为什么即使在我捕获了原始异常之后,它也不计算超过索引0的值。Powershell非常棒。