CJ7*_*CJ7 27 vb6 error-handling
为什么你会"On Error Goto 0"在VB6应用程序中使用?
此语句将关闭错误处理程序,并且意味着任何错误都会导致应用程序崩溃.为什么这会是可取的?
Mat*_*ard 48
在VB6中,您可以指定您希望稍后在例程中由特定代码处理错误:
Sub Bar()
On Error Goto MyHandler
...
...some code that throws an error...
...
Exit Sub
MyHandler:
...some error handler code (maybe pops up a dialog)
End Sub
Run Code Online (Sandbox Code Playgroud)
这可能是这种情况,但是,抛出的错误代码是局部的,而你不希望所有的程序代码的其余部分是相同的处理.在这种情况下,您将使用"On Error Goto 0",如下所示:
Sub Bar()
...
On Error Goto MyHandler
...some code that throws an error...
On Error Goto 0
...
...
Exit Sub
MyHandler:
...some error handler code (maybe pops up a dialog)
End Sub
Run Code Online (Sandbox Code Playgroud)
现在,只有在特定代码行失败时,您才能有效地确定错误处理的范围.
通过调用"On Error Goto 0",您并不是说您希望应用程序立即崩溃.您只是说要取消注册您在例程中先前设置的任何错误处理程序; 错误将在调用堆栈中传递给调用例程,就像正常情况一样.
由于用文字描述似乎很笨拙,这里有一些例子说明你可以On Error GoTo 0用于本地化的结构化错误处理.
第一个是Property Get类("MicroDOM"),它基于子类集合的层次结构实现轻量级DOM.在这种情况下,我们希望尝试通过名称而不是索引来引用缺少的Child来创建一个空的(没有attrbutes或子)Child:
Public Property Get Child(ByVal Key As Variant) As MicroDOM
If mChildren Is Nothing Then
Set mChildren = New Collection
End If
On Error Resume Next
Set Child = mChildren(Key)
If Err Then
On Error GoTo 0
If VarType(Key) = vbString Then
Key = Trim$(Key)
Set Child = New MicroDOM
Child.Key = Key
mChildren.Add Child, Key
Else
Err.Raise 9 'Subscript error as thrown by the Collection.
End If
End If
End Property
Run Code Online (Sandbox Code Playgroud)
第二个是内联代码,删除文件(如果存在):
On Error Resume Next
Kill strFilePath
On Error GoTo 0
Run Code Online (Sandbox Code Playgroud)
第三个是内联代码,仅在文件恰好存在时才执行操作:
On Error Resume Next
GetAttr strFilePath
If Err Then
On Error GoTo 0
ProcessTheData strFilePath
End If
On Error GoTo 0
Run Code Online (Sandbox Code Playgroud)
虽然对于没有经验的人(On Error GoTo 0在两个地方执行)来说可能看起来很尴尬,但结果却比On Error GoTo Label那些来回跳筏来处理各种异常更不笨拙和更有条理.
奖励是你也可以获得VBScript的可移植性,因为On Error GoTo Label它根本不是一个有效的构造.
它仅关闭CURRENT过程中的错误处理.如果调用过程中有错误处理程序,它将捕获任何未处理的异常.VB继续向上调用堆栈,直到找到错误处理程序.如果它没有找到任何那么它将导致运行时错误.
所以举个例子 - 也许你有一个包装器函数可以调用一些可能引发异常的第三方实用程序.而不是处理包装函数中的异常,而是放在On Error Goto 0那里.那么包装器函数的调用者将获得传递给它的异常,并希望以适当的方式处理它.
| 归档时间: |
|
| 查看次数: |
64756 次 |
| 最近记录: |