Meh*_*dad 35 vbscript try-catch
我正在尝试以下代码:
Try ' DOESN'T WORK
Throw 2 ' How do I throw an exception?
Catch ex
'What do I do here?
End Try
Run Code Online (Sandbox Code Playgroud)
但是我Statement expected在catch子句中遇到错误.
有谁知道如何使用try/catch在VBScript中捕获/抛出异常?(我不是在寻找解决方案On Error Do X.)
Mar*_*bau 70
我们在VBScript中可以使用一种"旧式"的错误处理方式,它可以使用On Error Resume Next.首先我们启用它(通常在文件的顶部;但是您可以使用它代替Err.Clear下面的第一个以获得它们的组合效果),然后在运行我们的可能错误生成代码之前,清除已经发生的任何错误,运行可能产生错误的代码,然后显式检查错误:
On Error Resume Next
' ...
' Other Code Here (that may have raised an Error)
' ...
Err.Clear ' Clear any possible Error that previous code raised
Set myObj = CreateObject("SomeKindOfClassThatDoesNotExist")
If Err.Number <> 0 Then
WScript.Echo "Error: " & Err.Number
WScript.Echo "Error (Hex): " & Hex(Err.Number)
WScript.Echo "Source: " & Err.Source
WScript.Echo "Description: " & Err.Description
Err.Clear ' Clear the Error
End If
On Error Goto 0 ' Don't resume on Error
WScript.Echo "This text will always print."
Run Code Online (Sandbox Code Playgroud)
如上所述,我们只是打印出错误.如果错误是致命的脚本,你可以更换第二Err.clear带 WScript.Quit(Err.Number).
还要注意,On Error Goto 0当发生错误时,会在下一个语句处关闭恢复执行.
如果要测试Set成功时的行为,请继续并注释掉该行,或者创建一个成功的对象,例如vbscript.regexp.
该On Error指令仅影响当前运行范围(当前Sub或Function),并且不影响调用或调用范围.
如果你想检查某种状态,然后提出一个错误,由调用你的函数的代码处理,你会使用Err.Raise.Err.Raise需要长达五个参数,Number,Source,Description,HelpFile,和HelpContext.使用帮助文件和上下文超出了本文的范围.Number是您选择的错误号Source,是引发错误的应用程序/类/对象/属性的名称,是对发生的错误Description的简短描述.
If MyValue <> 42 Then
Err.Raise(42, "HitchhikerMatrix", "There is no spoon!")
End If
Run Code Online (Sandbox Code Playgroud)
然后,您可以处理上面讨论的引发的错误.
更改日志
Err.Clear在可能的错误导致行之前添加了一个清除任何以前可能被忽略的错误.
On Error Resume Next和之间会有更多的代码Err.Clear.修正了一些语法不那么尴尬.添加了信息Err.Raise.格式化.
Tmd*_*ean 20
VBScript没有Try/Catch.(VBScript语言参考.如果有Try,它将列在Statements部分.)
On Error Resume Next是VBScript中唯一的错误处理.抱歉.如果你想要try/catch,JScript是一个选项.它支持VBScript所具有的所有功能并具有相同的功能.