要对不应该继续执行的一系列依赖操作实施体面的 VBScript 错误处理,请遵循以下规则:
- 将动作序列放入子/函数中
- 在 OERN 中调用此子/函数
- 在 OERN 范围内只有一条风险线
读取、计算/保存和删除(旧)数据的脚本演示:
Option Explicit
Dim iRet
Dim aErr
On Error Resume Next ' disable while development to see error line
iRet = main() ' just *one* risky line in OERN scope
aErr = Array(Err.Number, Err.Description, Err.Source)
On Error GoTo 0
If 0 <> aErr(0) Then
WScript.Echo "fatal error", aErr(0), "-", aErr(1), "in", aErr(2)
iRet = 1
Else
WScript.Echo "success"
End If
WScript.Quit iRet
Function main()
main = 2
ReadData
CalcAndSave
ZapOld
main = 0
End Function
Sub ReadData()
If WScript.Arguments.Named.Exists("read") Then Err.Raise 123, "ReadData()", "can't read"
WScript.Echo "reading data"
End Sub
Sub CalcAndSave()
If WScript.Arguments.Named.Exists("calc") Then Err.Raise 124, "CalcAndSave()", "can't calc and save"
WScript.Echo "calc and save data"
End Sub
Sub ZapOld()
If WScript.Arguments.Named.Exists("zap") Then Err.Raise 125, "ZapOld()", "can't zap"
WScript.Echo "zap old data"
If WScript.Arguments.Named.Exists("surprise") Then
Dim i : i = 1 / 0
End If
End Sub
这样称呼
cscript 25309137.vbs /calc
reading data
fatal error 124 - can't calc and save in CalcAndSave()
禁用唯一严格本地的 OERN,以确保您没有隐藏任何错误并在开发时获取行号信息:
cscript 25309137.vbs /surprise
reading data
calc and save data
zap old data
E:\trials\SoTrials\answers\25301708\vbs\25309137.vbs(39, 14) Microsoft VBScript runtime er
o
在您的情况下,风险序列是在循环中完成的。根据规则,演示代码应如下所示:
Option Explicit
WScript.Quit main()
Function main()
Dim aErr, n
For Each n In Array(1, 2, 0, 4)
On Error Resume Next ' disable while development to see error line
arithmetic n ' just *one* risky line in OERN scope
aErr = Array(Err.Number, Err.Description, Err.Source)
On Error GoTo 0
If 0 <> aErr(0) Then
WScript.Echo "fatal error", aErr(0), "-", aErr(1), "in", aErr(2)
End If
Next
main = 0
End Function
Sub arithmetic(n)
divide n
add n
mult n
End Sub
Sub divide(n)
WScript.Echo n, 1 / n
End Sub
Sub add(n)
WScript.Echo n, 1 + n
End Sub
Sub mult(n)
WScript.Echo n, 1 * n
End Sub
输出:
cscript 25309137-2.vbs
1 1
1 2
1 1
2 0,5
2 3
2 2
fatal error 11 - Division by zero in Microsoft VBScript runtime error
4 0,25
4 5
4 4