【发布时间】:2010-11-25 12:08:44
【问题描述】:
我在我的主调用过程中使用了一个错误处理程序,并让其他程序直接汇总到该错误处理程序。
我应该每次都清除错误吗?还是应该退出 Sub 而不是让错误处理程序在 End Sub 上继续?
我问是因为我读到我可能会捕获第一个错误,然后不会处理其他错误。
对不起,如果这不太清楚。不太清楚我在说什么。
谢谢!!
编辑:像这样。有必要吗?
Public Sub SubA()
On Error Goto ProcError
' other code
MsgBox FuncA()
ProcExit:
Exit Sub
ProcError:
MsgBox Err.Description
Resume ProcExit
End Sub
【问题讨论】:
-
请发布您自己的代码(或至少其中一些)来演示该问题。
-
根据示例代码,您在哪里清除错误?
-
好吧,我读到“Resume ProcExit”与 Err.Clear 做同样的事情。但是为什么我发布的代码是这样的?为什么“恢复 ProcExit”?只是为了清除错误?这样同样的程序可以处理下一个潜在的错误?
-
当您写“on error goto procError”时,如果发生错误,控件会跳转到“procError:”之后的行。因此错误得到处理,您可以在范围内使用 Err 对象(从“procError:”行到“end sub”/“exit sub”。因此,Err 在范围外不可用,因此它被隐式清除。
-
@shahkalpesh 我认为这不是真的。您可以写
Goto ProcExit而不是Resume ProcExit,然后直到Exit Sub才会清除Err。如果On Error Resume Next在 ProcExit 之后被用于保护某些资源释放代码,那么即使在 Exit Sub 也不会清除 Err,并且调用者可以看到资源释放期间的任何错误。
标签: vb6 error-handling