我正在查看其他人编写的代码。
一些重要的功能是混乱的,在整个功能的许多点改变了错误处理。当您浏览函数时,有On Error Goto ErrHandler
,On Error Goto 0
,On Error Resume Next
种。
通过并清理此错误处理的最佳方法是什么,以便在函数顶部只有一个On Error Goto ErrHandler
?
答案 0 :(得分:6)
我不认为拥有一个错误处理程序是最好的解决方案。
如果你有一个巨大的函数,有一个错误处理程序,并且出错了,你就不知道它失败了。
听起来好像你描述的函数在它们中有正确的错误处理,但这并不意味着它易于阅读。
也许最好的解决办法是将re-factor大函数分成几个较小的函数,它们可以有一个错误处理程序,当发生错误时你只有几行来追踪错误?
您可以使用现有的错误处理程序语句为代码重新分解提供合适的标记。
答案 1 :(得分:3)
如果不查看相关代码,很难说,但有时候单个函数中的几种不同类型的错误处理是合法的。通常,函数顶部的单个On Error GoTo ErrHandler
与支持异常的语言中的封闭try/catch
块具有相同的功能 - 它可以捕获意外发生的错误。
但是,在该函数中,可能存在一个错误是正常的,您希望检查内联的预期发生的位置。例如,假设您要访问网络驱动器,您必须考虑远程服务器处于脱机状态,网络关闭等等。在这种情况下,即使有On Error GoTo ErrHandler
在顶部的语句,您可以使用On Error Resume Next
在本地关闭它并尝试访问该驱动器。如果发生错误,VB6现在将进入下一个语句,您可以检查Err.Number
是否有0以外的任何内容。这类似于嵌套try/catch
以捕获预期的错误情况,您可以在当地处理。一旦执行超出风险代码,您必须标记您要去的地方的末尾"手动"使用另一个 On Error GoTo ErrHandler
语句以这种方式检查错误,以重新启用函数级处理程序。
因此,有多个On Error...
声明有效的情况。可以认为风险函数应该被重构并拥有自己的处理程序,但是你仍然必须处理来自该单独函数的特定(预期)错误返回值,因为被调用< / em>函数可能不知道在调用函数的上下文中面对这些错误该怎么做。您仍然可以使用短期On Error Resume Next
技术处理此问题。
On Error GoTo 0
禁用所有错误处理,只要发生意外错误,VB6就会退出您的函数。我很难想出一个非人为的情况,那将是一个不错的选择。