你什么时候使用每个?我发现我使用if比例外更多。我似乎在使用我的“ifs”来捕捉例外之前,我甚至没有得到它们。有我的代码全是ifs。什么时候应该使用“if”检查错误,以及何时应该使用异常?
回答
尝试catch语句旨在处理严重错误,尤其是连接到外部服务(如Web服务,数据库,Web请求等),其中错误将会随时发生。在运行时环境中处理异常比在编写好的代码和使用给定语言的特性(如ifs或三元操作)上要重要得多。
尝试捕获不是第一道防线,它们是使用防御性编码实践的最后一条线。
尤其是当您使用大型应用程序时,异常处理确实是一种更好的做法。正如你所提到的,你会得到很多if语句。使用python,使用try/except语句可以让你创建一个处理异常的更加标准化的方法。有了例外情况,您将看到异常类的类型以及您构建的其他自定义类的好处。它只是给你一个更加结构化的编码方式。
EAFP: Easier to ask for forgiveness than permission.
这是常见的Python代码风格的假设有效密钥或属性和捕获异常的存在,如果假设证明错误的。
与此相反,LBYL (Look before you leap)风格常见于许多其他语言如C
更新1
当然,你必须确保你处理任何捕获的异常,而不是只是默默地忽略它们否则你会浪费很多时间调试! pass
可能不是你正在寻找的!
更新2
你应该抓住特定的例外,你是期待是raise
-d,无论是built-in exceptions或其他方式。
我把泛型尝试:除了例外,:print e pass是那个? – TIMEX 2011-01-13 06:14:57
我不重复了许多人已经说过,但有使用异常的一个很大的优势,我想提一提其中:
如果一些常规失败,你可以轻松的哪个级别决定间接,你应该处理这个异常 - 你不需要在每一步之后用错误检查来膨胀更深的层次。
当然,这并不能让您摆脱责任,即拥有良好的清理代码,这将使每一个可能的执行路径都变得清晰:因此释放所有资源,套接字,提交或回滚事务等。而且有很多办法来做到这一点:
try... finally
块,允许任何异常传播,但清洗前的一切行动(多国语言,包括Python),- 的
with
声明(具体到Python), - 涉及在析构函数中清理(主要是C++)的RAII范例。
- 1. 什么时候应该使用require()以及何时使用define()?
- 2. 什么时候应该使用datagrid,何时应该使用datagridview?
- 3. 什么时候应该使用$(object),何时应该使用$ object?
- 4. 什么时候应该使用*以及何时&?
- 5. SqlCommand.Prepare()做什么以及它应该在什么时候使用?
- 6. 什么时候应该使用Import-Package,什么时候应该使用Require-Bundle?
- 7. Java:什么时候应该使用if-else,何时应该使用try ... catch来处理条件检查?
- 8. 什么时候应该使用AWS,什么时候不使用
- 9. 什么时候应该抛出异常?
- 10. 什么时候应该使用getElementById?
- 11. 什么时候应该使用_aligned_malloc()?
- 12. 什么时候应该使用GC.SuppressFinalize()?
- 13. 什么时候应该使用`use`?
- 14. 什么时候应该使用didFinishLaunchingWithOptions?
- 15. 什么时候应该使用模板
- 16. 什么时候应该使用可可?
- 17. 什么时候应该使用RESTful?
- 18. 什么时候应该使用const?
- 19. 什么时候应该使用git add?
- 20. 什么时候应该使用html5 sessionStorage?
- 21. 我什么时候应该使用javax.swing.SwingUtilities.invokeLater()?
- 22. 什么时候应该使用Solandra
- 23. 什么时候应该使用*,&,。 , - >?
- 24. 什么时候应该使用$(document).ready?
- 25. 什么时候应该使用scala.util.DynamicVariable?
- 26. 什么时候应该使用流?
- 27. 我什么时候应该使用UITableViewCellSeparatorStyleSingleLineEtched?
- 28. 什么时候应该使用FSharpFunc.Adapt?
- 29. 什么时候应该使用@android:id /?
- 30. 什么时候应该使用PostgreSQL中
这已被问无数次(2739582,1152541,1313812)。在这个问题之间,你的问题4557577(毫无疑问,无数其他人)和你现在超过800个问题*,似乎你是垃圾邮件发送者的问题。 – 2011-01-13 07:01:35