所謂異常指的是程序的執行出現了非預期行為,就好比現實中的做一件事過程中總會出現一些意外的事。異常的處理是跨越編程語言的,和具體的編程細節相比,程序執行異常的處理更像是哲學。限于認知能力和經驗所限,不可能達到像解釋器下import this看到的python設計之禪一樣,本文就結合實際使用簡單的聊一聊。
0. 前言
工作中,程序員之間一言不合就亮代碼,畢竟不管是代碼本身還是其執行過程,不會存在二義性,更不會含糊不清,代碼可謂是程序員之間的官方語言。但是其處理問題的邏輯或者算法則并非如此。
讓我至今記憶猶新的兩次程序員論劍有:
反問一:項目后期所有的異常處理都要去掉,不允許上線后出現未知的異常,把你這里的異常處理去掉,換成if else;
反問二:這里為什么要進行異常處理?代碼都是你寫的,怎么會出現異常呢?
這是我親身經歷的,不知道大家碰到這兩個問題會怎樣回答,至少我當時竟無言以對。這兩個問題分別在不同的時間針對不同的問題出自一個互聯網巨頭中某個資深QA和資深開發的反問。
暫且不論對錯,畢竟不同人考慮問題的出發點是不同的。但是從這么堅決的去異常處理的回答中至少有一點可以肯定,那就是很多人對自己的代碼太過自信或者說是察覺代碼潛在問題的直覺力不夠,更別提正確的處理潛在的問題以保證重要業務邏輯的處理流程。寫代碼的時候如果只簡單考慮正常的情況,那是在往代碼中下毒。
接下類本篇博文將按照套路出牌(避免被Ctrl + W),介紹一下python的異常處理的概念和具體操作.
1. 為什么要異常處理
常見的程序bug無非就兩大類:
語法錯誤; 邏輯不嚴謹或者思維混亂導致的邏輯錯誤;顯然第二種錯誤更難被發現,且后果往往更嚴重。無論哪一種bug,有兩種后果等著我們:一、程序崩掉;二、執行結果不符合預期;
對于一些重要關鍵的執行操作,異常處理可以控制程序在可控的范圍執行,當然前提是正確的處理。
比如我們給第三方提供的API或者使用第三方提供的API。多數情況下要正確的處理調用者錯誤的調用參數和返回異常結果的情況,不然就可能要背黑鍋了。
在不可控的環境中運行程序,異常處理是必須的。然而困難的地方是當異常發生時,如何進行處理。
2. python異常處理
下面逐步介紹一下python異常處理相關的概念。
2.1 異常處理結構
必要的結構為try ... except,至少有一個except,else 和 finally 可選。
try: code blocksexcept (Exception Class1, Exception Class2, ...) as e: catch and process exceptionexcept Exception ClassN: catch and process exception... ...else: when nothing unexpected happened finally: always executed when all to end
新聞熱點
疑難解答