判断异常是否例外

时间:2011-05-01 00:45:05

标签: exception exception-handling

这是一个非常受欢迎且众所周知的短语,你应该“只捕获/抛出异常的异常”。但是,如何确定“例外”例外?

例如,在登录服务时,错误的密码非常常见,因此这并非例外。 Web应用程序的统计信息可能会显示类似于每5次尝试的一次错误登录尝试(来自没有特定用户)。同样地,尝试在网上商店中使用购物篮结账时,这可能非常普遍(特别是对于新用户)。但是,找不到的文件可以是任何一种方式。我通常会认为,如果一个方法缺少某些东西来完成它的工作,抛出一个异常,但是这里有点令人困惑。在某些情况下,未找到的文件可能很常见(例如,许多用户使用的文件共享没有严格的控制),而非锁定的生产环境缺少文件,这将是例外。

这是推断异常是否异常的正确方法吗?我可以轻松过滤无网络连接等特殊情况,但有些情况很难判断。这是主观的吗?

由于

1 个答案:

答案 0 :(得分:1)

我认为这是非常主观的,老实说,所以我更愿意避免使用这种方法来确定何时应该使用例外。

相反,我更愿意考虑三件事:

  1. 我是否可能想让调用堆栈放松多个级别?
  2. 还有另外一种方法吗? (返回null或错误代码等)如果是这样,我是否有最轻微的性能问题?
  3. 如果这些都没有导致明确的决定,那些必须维护代码的人更容易阅读?
  4. 如果#1为真,并且我没有主要的性能问题,我可能会选择使用异常,因为它会加快我的开发时间,不必编写返回代码(并手动编写逻辑代码)如果需要,它们会向上传播调用栈。当您使用异常时,调用堆栈展开对于开发时间是免费的。

    如果#2为真,并且要么我不会超过一帧(可能是两个?)调用堆栈,或者我有严重的性能问题(例如,在一个紧密的循环中),那么我会我们很难找到另一种不涉及异常的方式。

    异常只是程序员使用支持它们的语言的工具。我不认为他们必须具备任何“特殊”或不具有的内在价值。相反,我说当它们是工作的最佳工具时使用它们