Vbscript 如果在使用On error时遇到多个错误,请继续下一步

Vbscript 如果在使用On error时遇到多个错误,请继续下一步,vbscript,qtp,Vbscript,Qtp,使用On Error Resume Next时,它跳过遇到的错误并移动到下一行。 如果我们使用err.Number和err.Description,它会显示与错误相关的消息和编号。 我的问题是:如果它面临的不仅仅是错误……那么它将如何表现 On Error Resume Next intDivideByZero floatDivideByZero If err.Number <> 0 Then msgbox "the error number is : " &

使用On Error Resume Next时,它跳过遇到的错误并移动到下一行。 如果我们使用err.Number和err.Description,它会显示与错误相关的消息和编号。 我的问题是:如果它面临的不仅仅是错误……那么它将如何表现

On Error Resume Next
    intDivideByZero
    floatDivideByZero
If err.Number <> 0 Then
    msgbox "the error number is : " & err.Number
    msgbox "the error description is : " & err.Description
End If
On error Resume 0
出错时继续下一步
整数除以零
浮点数除以零
如果错误号为0,则
msgbox“错误号为:”&错误号
msgbox“错误描述为:”&错误描述
如果结束
出现错误时恢复0

VBScript错误处理相当有限。您需要在可能发生错误的每一行后面放置一个错误处理程序。此外,
Err
对象在发生错误后不会自动重置,因此您需要自己进行重置。否则,即使在下一条语句后没有出现错误,对象仍将在下一条语句后指示错误

On Error Resume Next
intDivideByZero
If Err Then
    WScript.Echo "0x" & Hex(Err.Number) & ": " & Err.Description
    Err.Clear
End If
floatDivideByZero
If Err Then
    WScript.Echo "0x" & Hex(Err.Number) & ": " & Err.Description
    Err.Clear
End If
On Error Goto 0
通过将处理程序包装在过程中并在每条语句后调用该过程,可以稍微简化这一点:

Sub Trap
    If Err Then
        WScript.Echo "0x" & Hex(Err.Number) & ": " & Err.Description
        Err.Clear
    End If
End Sub

On Error Resume Next
intDivideByZero   : Trap
floatDivideByZero : Trap
On Error Goto 0

错误转到0时不是
?同时,在错误转到0时指定
,将
错误号设置回
0
,而不需要
Err.Clear()
。我敢肯定,如果您现在运行它,它将因语法错误而失败。@Lankymart Yes。但该语句位于
floatDivideByZero
之后<代码>错误
需要在每次错误后清除(即在
intDivideByZero
之后),否则您可能会得到误报(例如,在
intDivideByZero
引发错误,但
floatDivideByZero
未引发错误的情况下)。不过,关于语法,你是对的。修正了。是的,我意识到了。我的观点是错误恢复0上的语句
一开始就错了。关于
Err.Clear()
的一点仅仅是在您希望检查错误的条件出现后立即使用
On Error Goto 0
的一个很好的副产品,我并不是建议您在示例代码中使用它是错误的。它更针对回答中的这句话——“此外,
Err
对象在发生错误后不会自动重置,因此您需要自己重置。”。Ansgar..感谢您让我理解了这个概念..通过这样一个精彩的示例..:)@downvoter是否愿意解释您认为downvote对这个答案有什么价值?应该是错误转到0时的
而不是错误恢复0时的
,这将触发您不期望的语法错误。