【发布时间】:2010-12-21 19:33:25
【问题描述】:
我习惯于使用 C# 进行编程,它显然具有一些非常强大的错误处理能力。现在我正在用 VBScript 做一个简短的项目。我已经阅读了使用“On Error _______”和Err 全局变量的VBscript 错误处理。
但是,有什么方法可以生成我自己的错误吗?例如,如果我的一个函数传递了错误类型的参数,我宁愿我的脚本在那时完全失败,然后尝试继续。
【问题讨论】:
我习惯于使用 C# 进行编程,它显然具有一些非常强大的错误处理能力。现在我正在用 VBScript 做一个简短的项目。我已经阅读了使用“On Error _______”和Err 全局变量的VBscript 错误处理。
但是,有什么方法可以生成我自己的错误吗?例如,如果我的一个函数传递了错误类型的参数,我宁愿我的脚本在那时完全失败,然后尝试继续。
【问题讨论】:
是的,你可以。使用Err.Raise 方法,例如:
Err.Raise 5 ' Invalid procedure call or argument
有关 VBScript 标准错误代码的列表,请参阅Errors (VBScript)。
【讨论】:
它详细介绍了Err.Raise() 方法,但遗漏了一些关键点。
来自original question
但是,有什么方法可以生成我自己的错误吗?例如,如果我的一个函数传递了错误类型的参数,我宁愿我的脚本在那时完全失败,然后尝试继续。
Err.Raise() 非常通用,它可以抛出现有异常(如前所述),但它也可以抛出全新的用户定义异常。
Call Err.Raise(vbObjectError + 10, "My Application", "My custom error message")
vbObjectError (-2147221504) 是一个内置的 VBScript 常量,它定义了引发用户定义错误的边界。
【讨论】:
vbObjectError 和任何整数时从未遇到任何问题。但无论如何,感谢您指出范围,可能对某人有用。
try {
// some code
} catch( Exception e ) {
// error handler
} finally {
// clean up things
}
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 project
【讨论】:
On Error Resume Next。
finally 块也会执行。您的 VBScript “等效”应该在 If 语句之外有 'clean up things 部分,以及一个 On Error GoTo 0 以停止错误处理。此外,另一个区别是 VBScript 'some code 部分只能是一行,或者至少只能包含一行可能会产生错误的行,因为下一行,不管它是什么 将在On Error Resume Next 处于活动状态时执行。 If 1 = 1 / 0 Then 将流入 If 块。