陷阱错误或'恢复下一步'

时间:2010-05-03 10:46:05

标签: vb6 error-handling

我意识到这是一个较旧的编程环境,但我必须清理一些VB6代码,我发现它大部分使用:

On Error Resume Next

关于使用On Error Resume Next的一般共识是什么?

当然,如果出现错误,您可能希望应用程序停止正在执行的操作,回滚所有数据更改,并通知用户错误,而不仅仅是恢复。

何时使用On Error Resume Next

是个好主意

3 个答案:

答案 0 :(得分:7)

使用 On Error Resume Next 来实现本地结构化错误处理是完全合理的。这包括测试异常并对其采取行动,以及随后解除机制。例如:

On Error Resume Next
GetAttr strFilePath
If Err Then
    On Error GoTo 0
    'Deal with "no file" scenario.
Else
    On Error GoTo 0
    'Open and process the file.
End If

这只是一个简单的例子,预计只会出现一种异常。在某些情况下,有必要测试Err.Number的特定值,并根据它们采取不同的操作。

基于GoTo 标签的非结构化方法通常也可以正常工作,但在大多数情况下它并不优越。在VBScript中,上面显示的模式是您甚至没有GoTos或标签的唯一异常处理形式。

令人反感的是在每个程序的头部设置明确的异常测试并忽略它......一种信任力量,Luke 方法试图掩盖编码错误。

答案 1 :(得分:5)

我发现它在错误不能保证用户被问题中断的函数中很有用。一个很好的例子是resize事件。如果你犯了错误或者resize事件出现问题,那么你可能不希望用户看到这个,因为它可能不会影响功能。

我会说,一般情况下,谨慎使用它。

答案 2 :(得分:2)

几乎从不 - 除非有意识地使用例如成功调用将设置特定返回值的行,并且后续代码处理返回值以满足错误情况。