python函数式编程读取数据时出现错误_Python编程中,函数遇到问题是抛出错误好还是约定返回值好?...
這其實是一個編碼規范的問題,沒有任何場景都適用的解決方案,就好比有了 list,但是還是需要 tuple,所以對于拋出異常好,還是返回值好,是需要具體情況看的。
在 C 語言中,通用的做法是函數返回一個 code 描述狀態,例如 main 函數,一般返回 0 就是正常,其他數值就需要去查錯誤碼。這種方式仍廣泛使用于 HTTP API 等接口。而到了面向對象編程語言,異常也是一個類的實例,用于表達特定的意思,這樣異常有了更豐富的表現方式,處理方式也顯得更優雅。
但是異常的捕獲就是萬能的了嗎?
并不是,現實情況是,不少人仍是“錯誤”的處理異常。例如從頭到尾的一個 try except,并且捕獲所有異常,這就是為了處理異常而處理異常,反而增加了代碼量。
異常捕獲其實也是需要講究技術的,就好比會寫代碼,不一定會寫出優雅的代碼、高效的代碼;會捕獲異常,不一定會“優雅”地捕獲異常。
對于開發團隊的管理者來說,一些編碼“規范”(例如何時改拋出異常,怎么捕獲等)也是越早立下越好,對于后期項目的維護和轉移是非常有利的。
對于開發者來說,一些編碼“規范”的培養,不但是個人編碼“素養”的提高,也是技術視野的提升。一段時間后反觀自己過去的代碼,一定會覺得怎么寫的這么“丑陋”。
下面我也簡單講一下什么場景下該怎么“使用”異常。
如下情況應該盡量使用異常處理:執行的錯誤情況非常多樣化,單一的返回值無法表示多種情況
執行的錯誤需要調用方區別對待
方法的調用層次比較深,拋出異常能使代碼更簡潔且易讀
用于鏈式調用的方法,例如生成器模式中,避免調用方多余的判斷
如下情況應該盡量避免使用異常處理:不要用異常做條件判斷,條件判斷語句的性能一般更好
方法返回值簡單,且用于條件判斷的,例如 if 語句中的子串查找都用 find 而不是 index
下面是異常處理的一些規范分享:不要在最外層調用整段 try except,這非常不負責任,而且也不好 debug
一般捕獲的都是 Exception 異常的子類,一般情況下不用捕獲底層異常
系統一般都推薦定義自己的異常類(甚至是異常類樹),即使內容是空的(最好有文檔和__str__),便于區分
盡量捕獲明確的子類異常,用多 catch 捕獲,最后可以捕獲 Exception,不要上來就直接捕獲 Exception,區分異常的類型能更好的幫助我們區別處理
不要為了不拋出異常而去捕獲并拋棄,如果不能處理,就拋給上層調用者
要善于使用 finally 和 else,特別是數據庫事務,連接等需要主動關閉或回滾的情況
不需要每次捕獲都打印日志,規劃好日志級別,不然日志會難以閱讀
捕獲嚴重異常后打印日志最好用 traceback 帶上調用鏈信息,便于定位問題
先寫這么多吧,語言等技術只是實現方式,最后還是得看我們需要解決的問題。
總結
以上是生活随笔為你收集整理的python函数式编程读取数据时出现错误_Python编程中,函数遇到问题是抛出错误好还是约定返回值好?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3.7输出语句_Day3-P
- 下一篇: linux删除文件_Linux删除文件夹