你什麼時候使用每個?我發現我使用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