我可以在VBScript中抛出错误吗?

34

我习惯于使用C#编程,它显然具有相当强大的错误处理功能。现在我正在使用VBScript进行一个短期项目。我已经了解了使用"On Error _______"和Err全局变量来处理VBscript中的错误。

然而,是否有一种方法可以生成自己的错误?例如,如果我的某个函数传递了错误类型的参数,我希望我的脚本在这一点上直接失败而不是尝试继续运行。

3个回答

37

虽然@helen答案是正确的,但有点简略。

它详细介绍了Err.Raise()方法,但遗漏了一些关键点。

来自原问题
然而,是否有办法生成我自己的错误?例如,如果我的其中一个函数传递了错误类型的参数,我希望我的脚本在那一点上彻底失败,而不是尝试继续执行。

Err.Raise()非常灵活,它可以抛出现有的异常(如前所述),也可以抛出全新的用户定义异常。

Call Err.Raise(vbObjectError + 10, "My Application", "My custom error message")

vbObjectError-2147221504)是VBScript内置的常量,用于定义用户自定义错误的边界。


1
用户定义的信息非常有帮助。 - bvj
1
在测试过程中,我发现自定义错误号应该在513-65535的范围内,而不是10。虽然这样做可以工作,但是自定义错误消息无法在ASP错误对象中找到(更多信息请参见:https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/raise-method)。 - Sunib
@Sunib 感谢您提供的参考,但是说实话,我从来没有使用过 vbObjectError 和任何整数出现过问题。但是还是感谢您指出了范围,这对某些人可能会有用。 - user692942

36

可以的。使用 Err.Raise 方法,例如:

Err.Raise 5 ' Invalid procedure call or argument

有关VBScript标准错误代码的列表,请参见Errors (VBScript)


4

C# try-catch-finally

try {
    // some code
} catch( Exception e ) {
    // error handler
} finally {
    // clean up things
}

VBScript相当于

on error resume next
' some code
if( Err.number <> 0 ) then
    ' error handler -- you can use Err.raise() here to display your own errors
    Err.clear()
else
    ' clean up things
end if
on error goto 0

如果你想要一些优秀的VBScript示例,可以查看ASP Xtreme Evolution项目


8
VBScript 不支持 On Error GoTo Label 语句。 - Tmdean
@Tmdean - 过了一段时间,VB6和VBScript有点混合在一起。 - ChaosPandion
8
这两个代码块是不等价的,因为finally块即使发生错误也会执行。你的VBScript“等效”应该将“清理事项”部分放在If语句之外,并添加一个On Error GoTo 0来停止错误处理。此外,另一个区别是VBScript的'some code部分只能有一行或者至少只包含一个可能会生成错误的行,因为无论下一行是什么,当On Error Resume Next激活时都将被执行。If 1 = 1 / 0 Then将流入If块中。 - ErikE
“on error goto 0” 不是已经清除了错误吗?如果是这样,“err.clear”就是多余的。 - Stephen R
C#示例比较与VBScript中的错误处理有什么关系?该问题未标记[tag:c#],请坚持主题。 - user692942
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接