当前位置:  开发笔记 > 编程语言 > 正文

VBScript - 使用错误处理

如何解决《VBScript-使用错误处理》经验,为你挑选了2个好方法。

我想使用VBScript来捕获错误并记录它们(即错误"记录某些内容")然后恢复脚本的下一行.

例如,

On Error Resume Next
'Do Step 1
'Do Step 2
'Do Step 3

当在步骤1发生错误时,我希望它记录该错误(或用它执行其他自定义功能),然后在步骤2恢复.这可能吗?我该如何实现它?

编辑:我可以这样做吗?

On Error Resume myErrCatch
'Do step 1
'Do step 2
'Do step 3

myErrCatch:
'log error
Resume Next

Dylan Beatti.. 152

VBScript没有抛出或捕获异常的概念,但运行时提供了一个全局Err对象,其中包含上次执行的操作的结果.您必须在每次操作后显式检查Err.Number属性是否为非零.

On Error Resume Next

DoStep1

If Err.Number <> 0 Then
  WScript.Echo "Error in DoStep1: " & Err.Description
  Err.Clear
End If

DoStep2

If Err.Number <> 0 Then
  WScript.Echo "Error in DoStop2:" & Err.Description
  Err.Clear
End If

'If you no longer want to continue following an error after that block's completed,
'call this.
On Error Goto 0

Visual Basic和Visual Basic for Applications(VBA)支持"On Error Goto [label]"语法,但VBScript不支持此语言功能,因此您必须使用On Error Resume Next,如上所述.



1> Dylan Beatti..:

VBScript没有抛出或捕获异常的概念,但运行时提供了一个全局Err对象,其中包含上次执行的操作的结果.您必须在每次操作后显式检查Err.Number属性是否为非零.

On Error Resume Next

DoStep1

If Err.Number <> 0 Then
  WScript.Echo "Error in DoStep1: " & Err.Description
  Err.Clear
End If

DoStep2

If Err.Number <> 0 Then
  WScript.Echo "Error in DoStop2:" & Err.Description
  Err.Clear
End If

'If you no longer want to continue following an error after that block's completed,
'call this.
On Error Goto 0

Visual Basic和Visual Basic for Applications(VBA)支持"On Error Goto [label]"语法,但VBScript不支持此语言功能,因此您必须使用On Error Resume Next,如上所述.


您可以在If语句中更改WScript.Echo以调用Function或Sub,这可以依次退出应用程序,记录错误等.

2> omegastripes..:

请注意,On Error Resume Next未全局设置.您可以将不安全的代码部分放入函数中,如果发生错误将立即中断,并从包含先前OERN语句的子函数中调用此函数.

ErrCatch()

Sub ErrCatch()
    Dim Res, CurrentStep

    On Error Resume Next

    Res = UnSafeCode(20, CurrentStep)
    MsgBox "ErrStep " & CurrentStep & vbCrLf & Err.Description

End Sub

Function UnSafeCode(Arg, ErrStep)

    ErrStep = 1
    UnSafeCode = 1 / (Arg - 10)

    ErrStep = 2
    UnSafeCode = 1 / (Arg - 20)

    ErrStep = 3
    UnSafeCode = 1 / (Arg - 30)

    ErrStep = 0
End Function


@Lankymart你会介意链接一个你当时看到的更清晰的例子,或者建议omegastripes如何改进这个例子?
有一秒钟,我得到的印象是我错过了一个名为"omegastripes"的新软件工程范例
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有