VbScript错误对象已由On Error语句清除

VbScript错误对象已由On Error语句清除,vbscript,error-handling,Vbscript,Error Handling,有点像是VbScript的新手,正在尝试实现错误处理。我的方法是将error对象传递给HandleErr sub,但是错误显然会被带有sub的“On error Resume Next”语句清除。使用Windows 7 On Error Resume Next Dim x x = 1/0 msgbox "Original Error: " & err.Number & " - " & err.Description if err.number <> 0 the

有点像是VbScript的新手,正在尝试实现错误处理。我的方法是将error对象传递给HandleErr sub,但是错误显然会被带有sub的“On error Resume Next”语句清除。使用Windows 7

On Error Resume Next
Dim x
x = 1/0
msgbox "Original Error: " & err.Number & " - " & err.Description
if err.number <> 0 then HandleErr err

Sub HandleErr(objErr)
    on error resume next  '### Without this On Error statement, the script runs fine.
    msgbox "Error in HandleErr: " & objErr.Number & " - " & objErr.Description '### objErr.Number becomes zero.
    WScript.Quit objErr.Number
End Sub
出错时继续下一步
暗x
x=1/0
msgbox“原始错误:&错误编号&“-”&错误说明
如果err.number为0,则HandleErr err
副把手(objErr)
on error resume next'###如果没有此on error语句,脚本运行正常。
msgbox“HandleErr中的错误:”&objErr.Number&“-”&objErr.Description'###objErr.Number变为零。
WScript.Quit objErr.Number
端接头

我想这有一个简单的答案。任何帮助都将不胜感激。

您希望在到达
HandleErr()
后,使用
On Error Resume Next
停止跳过错误。还可以使用
Err.Clear()
重置
Err
对象

出错时继续下一步
暗x
x=1/0
MsgBox“原始错误:&错误编号&“-”&错误说明
如果错误号为0,则HandleErr错误
'发生错误时停止跳过行。
错误转到0
副把手(objErr)
MsgBox“HandleErr中的错误:”&objErr.Number&“-”&objErr.Description'###objErr.Number变为零。
'清除当前错误,现在您已捕获它。
呃,明白了
WScript.Quit objErr.Number
端接头
就我个人而言,我不会将
Err
传递到您的函数中,因为
Err
是一个全局内置对象,因此您仍然可以检查值,而无需传递它

出错时继续下一步
暗x
x=1/0
MsgBox“原始错误:&错误编号&“-”&错误说明
调用HandleErr()
'发生错误时停止跳过行。
错误转到0
副把手()
“我们需要捕捉错误吗?
如果错误号为0,则
MsgBox“handleerror:&Err.Number&“-”&Err.Description'###Err.Number变为零。
'清除当前错误,现在您已捕获它。
呃,明白了
WScript.Quit错误号
如果结束
端接头

当您到达
HandleErr()
时,您想用
在错误恢复下一步中停止跳过错误。还可以使用
Err.Clear()
重置
Err
对象

出错时继续下一步
暗x
x=1/0
MsgBox“原始错误:&错误编号&“-”&错误说明
如果错误号为0,则HandleErr错误
'发生错误时停止跳过行。
错误转到0
副把手(objErr)
MsgBox“HandleErr中的错误:”&objErr.Number&“-”&objErr.Description'###objErr.Number变为零。
'清除当前错误,现在您已捕获它。
呃,明白了
WScript.Quit objErr.Number
端接头
就我个人而言,我不会将
Err
传递到您的函数中,因为
Err
是一个全局内置对象,因此您仍然可以检查值,而无需传递它

出错时继续下一步
暗x
x=1/0
MsgBox“原始错误:&错误编号&“-”&错误说明
调用HandleErr()
'发生错误时停止跳过行。
错误转到0
副把手()
“我们需要捕捉错误吗?
如果错误号为0,则
MsgBox“handleerror:&Err.Number&“-”&Err.Description'###Err.Number变为零。
'清除当前错误,现在您已捕获它。
呃,明白了
WScript.Quit错误号
如果结束
端接头

使用
On Error Goto 0
禁用
On Error Resume Next
Err.Clear()
捕获当前错误后清除它。使用
On Error Goto 0
禁用
On Error Resume Next
Err.Clear()
捕获当前错误后清除它。感谢您的回答。我看得出我不是很清楚。
HandleErr
中的Msgbox仅用于调试。我希望这个脚本返回错误代码,所以我不一定要清除错误。从您的代码中,我假设您是说在错误处理程序中不需要
On Error Resume Next
语句?另外,为什么要在脚本主体的最后一行上设置
On Error Goto 0
?我完全理解您关于不将
Err
传递到函数中的观点。我测试了一下
Err
是否真的是全局的,但是我的潜艇在开始时有一个
On Error Resume Next
语句。这似乎消除了错误。现在我看到(没有
On Error
)您可以从sub.@JBStovers访问
Err
。我不知道您当时想做什么。最后的
On Error Goto 0
是重置您可能拥有的其他代码的错误处理行为(假设这只是一个片段)。与
Err.Clear()相同。
。您只是想问,当您在错误恢复下一步设置
时,为什么
Err
会被重置,简短的回答…因为它的设计目的是。在错误处理函数中调用“错误恢复下一步”
毫无意义,您告诉VBScript跳过任何包含错误的行,并将
Err
对象设置为该错误。你明白我为什么困惑吗?如果我是一个有经验的编剧,我相信我会理解你的困惑的!:)因为我不是,所以在我看来,您可以在sub中将
放在下一个错误恢复上
,并且在主体中生成的错误仍然存在。我想这是行不通的,你必须在错误发生的主体中找出错误。感谢你的回答。我看得出我不是很清楚。
HandleErr
中的Msgbox仅用于调试。我希望这个脚本返回错误代码,所以我不一定要清除错误。从您的代码中,我假设您是说在错误处理程序中不需要
On Error Resume Next
语句?另外,为什么要在脚本主体的最后一行上设置
On Error Goto 0
?我完全明白您关于不传递
Err
的观点