什么时候应该使用“if”检查错误,什么时候应该使用例外?

时间:2011-01-13 05:03:39

标签: python exception error-handling conditional

你什么时候使用?我发现我使用的不仅仅是例外情况。在我得到它们之前,似乎我正在使用我的“ifs”捕获异常。我的代码遍布各处。

4 个答案:

答案 0 :(得分:4)

EAFP: Easier to ask for forgiveness than permission.

通常的Python编码风格假定存在有效的键或属性,并且如果假设证明是错误则捕获异常。

这与许多其他语言(如C。

)共有的LBYL (Look before you leap)风格形成对比

更新1

当然,您必须确保处理任何捕获的异常,而不是默默地忽略它们,否则您将浪费大量时间进行调试! pass可能不是你想要的!

更新2

您应该抓住期望raise特定例外 - d,无论它们是built-in exceptions还是其他。

答案 1 :(得分:2)

尝试catch语句旨在处理严重错误,特别是用于连接外部服务,例如Web服务,数据库,Web请求等,其中错误将会不时发生。处理异常的运行时环境比你编写好代码和利用给定语言的功能(如ifs或三元操作)更重。

尝试捕获不是第一道防线,它们是使用防御性编码实践的最后一条线。

答案 2 :(得分:2)

我不是在重复许多人已经说过的话,但是使用我要提及的例外情况有很大优势:

如果某个例程失败,您可以轻松地决定应该处理该异常的间接级别 - 并且在执行每个步骤后,您不需要在更深层次上进行错误检查

当然,这并没有让你免于承担良好的清理代码的责任,这将使每个可能的执行路径都清楚:所以释放任何资源,套接字,提交或回滚事务等等。有很多方法做到这一点:

  • try... finally阻止,允许任何异常传播,但之前清理所有内容(许多语言,包括Python),
  • with语句(特定于Python),
  • RAII范例,涉及在析构函数中清理(主要是C ++)。

答案 3 :(得分:1)

特别是在处理大型应用程序时,异常处理确实是一种更好的做法。如你所说,你得到了很多if语句。使用python,使用try / except语句可以创建更加标准化的异常处理方式。除了例外,您将获得查看异常类的类型以及您构建的任何其他自定义类的好处。它只是为您提供了更加结构化的编码方式。