Python 捕獲代碼中所有異常的方法
問題
怎樣捕獲代碼中的所有異常?
解決方案
想要捕獲所有的異常,可以直接捕獲 Exception 即可:
try: ... except Exception as e: ... log('Reason:', e) # Important!
這個(gè)將會捕獲除了 SystemExit
、 KeyboardInterrupt
和 GeneratorExit
之外的所有異常。 如果你還想捕獲這三個(gè)異常,將 Exception
改成 BaseException
即可。
討論
捕獲所有異常通常是由于程序員在某些復(fù)雜操作中并不能記住所有可能的異常。 如果你不是很細(xì)心的人,這也是編寫不易調(diào)試代碼的一個(gè)簡單方法。
正因如此,如果你選擇捕獲所有異常,那么在某個(gè)地方(比如日志文件、打印異常到屏幕)打印確切原因就比較重要了。 如果你沒有這樣做,有時(shí)候你看到異常打印時(shí)可能摸不著頭腦,就像下面這樣:
def parse_int(s): try: n = int(v) except Exception: print("Couldn't parse")
試著運(yùn)行這個(gè)函數(shù),結(jié)果如下:
>>> parse_int('n/a') Couldn't parse >>> parse_int('42') Couldn't parse >>>
這時(shí)候你就會撓頭想:“這咋回事啊?” 假如你像下面這樣重寫這個(gè)函數(shù):
def parse_int(s): try: n = int(v) except Exception as e: print("Couldn't parse") print('Reason:', e)
這時(shí)候你能獲取如下輸出,指明了有個(gè)編程錯(cuò)誤:
>>> parse_int('42') Couldn't parse Reason: global name 'v' is not defined >>>
很明顯,你應(yīng)該盡可能將異常處理器定義的精準(zhǔn)一些。 不過,要是你必須捕獲所有異常,確保打印正確的診斷信息或?qū)惓鞑コ鋈?,這樣不會丟失掉異常。
以上就是Python 捕獲代碼中所有異常的方法的詳細(xì)內(nèi)容,更多關(guān)于Python 捕獲異常的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python多進(jìn)程登錄遠(yuǎn)端服務(wù)器
這篇文章主要介紹了python多進(jìn)程登錄遠(yuǎn)端服務(wù)器,文章應(yīng)用實(shí)例簡易的方式詳細(xì)講解python多進(jìn)程登錄遠(yuǎn)端服務(wù)器的相關(guān)資料,需要的朋友可以參考以下文章的具體內(nèi)容2021-10-10Python flask框架實(shí)現(xiàn)查詢數(shù)據(jù)庫并顯示數(shù)據(jù)
這篇文章主要介紹了Python flask框架實(shí)現(xiàn)查詢數(shù)據(jù)庫并顯示數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06基于keras中import keras.backend as K的含義說明
這篇文章主要介紹了keras中import keras.backend as K的含義說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python實(shí)現(xiàn)簡單飛機(jī)大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡單飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07Python數(shù)據(jù)模型與Python對象模型的相關(guān)總結(jié)
這篇文章主要介紹了Python數(shù)據(jù)模型與Python對象模型的相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2021-01-01跟老齊學(xué)Python之總結(jié)參數(shù)的傳遞
這篇文章主要介紹了Python參數(shù)的傳遞的總結(jié),非常的實(shí)用,有需要的朋友可以參考下2014-10-10