为什么抛出异常而不是返回错误代码更好?

m.e*_*son 26 error-handling exception-handling exception

传统错误处理倾向于遵循所有函数根据成功/失败返回代码的方法.您将检查此代码并正确处理(如果出现错误).

然而,现代编程语言遵循异常模型,如果发生无法正常处理的异常事件,则抛出异常 - 这会一直冒泡直到处理完毕.

我的问题是为什么我们走向异常模式?这背后的原因是什么?为什么更好?

非常感谢解释/链接.

Ned*_*der 35

我已经详细地写了这篇文章:例外与状态的回归,但简单地说:

  1. 在每次调用时测试状态返回时,异常会使代码清除所有必要的检查,
  2. 例外允许您使用函数的返回值作为实际值,
  3. 例外可以携带比状态返回更多的信息,
  4. 最重要的是:通过不作为不能忽略异常,而状态返回则可以.

要扩展最后一点:如果您忘记执行状态返回应该执行的操作,则忽略错误.如果您忘记执行应该对异常执行的操作,则异常会冒泡到软件的外层,使其可见.


Jar*_*Par 11

这有几个原因

  • 忽略异常需要开发人员采取行动,而忽略错误的返回值则需要完全执行0操作.理论上,这使得开发人员更有可能处理错误而不是忽略它或者甚至没有意识到它正在发生.
  • 在错误点和处理之间提供更清晰的分离.它不会强制在两者之间的每个点手动传播错误.
  • 与简单的错误代码相比,异常可以获得更大,更丰富的信息负载.有很多方法可以使用错误代码执行此操作,但这更像是事后的想法并且有点麻烦.


sup*_*cat 5

状态代码通常比异常更好,因为它们表示函数的立即调用代码准备处理的情况。状态代码的问题在于,如果立即调用代码不处理它们,则很可能什么都不会。如果代码抛出异常并且立即调用的代码不准备处理它,则异常将传播到至少声称已准备好的代码。

  • 状态代码似乎取决于自定义状态列表(除非该列表是本机的,如“http”协议)。因此,这似乎会带来直接的开销,而常见的编程语言似乎具有用于异常和处理异常的运算符的本机结构。这意味着更少的开销……典型的函数式编程。 (2认同)