你什么时候使用?我发现我使用的不仅仅是例外情况。在我得到它们之前,似乎我正在使用我的“ifs”捕获异常。我的代码遍布各处。
答案 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),答案 3 :(得分:1)
特别是在处理大型应用程序时,异常处理确实是一种更好的做法。如你所说,你得到了很多if语句。使用python,使用try / except语句可以创建更加标准化的异常处理方式。除了例外,您将获得查看异常类的类型以及您构建的任何其他自定义类的好处。它只是为您提供了更加结构化的编码方式。