Python 捕獲代碼中所有異常的方法
問(wèn)題
怎樣捕獲代碼中的所有異常?
解決方案
想要捕獲所有的異常,可以直接捕獲 Exception 即可:
try: ...except Exception as e: ... log(’Reason:’, e) # Important!
這個(gè)將會(huì)捕獲除了 SystemExit 、 KeyboardInterrupt 和 GeneratorExit 之外的所有異常。 如果你還想捕獲這三個(gè)異常,將 Exception 改成 BaseException 即可。
討論
捕獲所有異常通常是由于程序員在某些復(fù)雜操作中并不能記住所有可能的異常。 如果你不是很細(xì)心的人,這也是編寫(xiě)不易調(diào)試代碼的一個(gè)簡(jiǎn)單方法。
正因如此,如果你選擇捕獲所有異常,那么在某個(gè)地方(比如日志文件、打印異常到屏幕)打印確切原因就比較重要了。 如果你沒(méi)有這樣做,有時(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í)候你就會(huì)撓頭想:“這咋回事啊?” 假如你像下面這樣重寫(xiě)這個(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 parseReason: global name ’v’ is not defined>>>
很明顯,你應(yīng)該盡可能將異常處理器定義的精準(zhǔn)一些。 不過(guò),要是你必須捕獲所有異常,確保打印正確的診斷信息或?qū)惓鞑コ鋈ィ@樣不會(huì)丟失掉異常。
以上就是Python 捕獲代碼中所有異常的方法的詳細(xì)內(nèi)容,更多關(guān)于Python 捕獲異常的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. python中文本字符處理的簡(jiǎn)單方法記錄2. Python基于requests庫(kù)爬取網(wǎng)站信息3. Python-openpyxl表格讀取寫(xiě)入的案例詳解4. PHP laravel實(shí)現(xiàn)導(dǎo)出PDF功能5. ASP基礎(chǔ)知識(shí)Command對(duì)象講解6. 使用Blazor框架實(shí)現(xiàn)在前端瀏覽器中導(dǎo)入和導(dǎo)出Excel7. JavaScript實(shí)現(xiàn)留言板實(shí)戰(zhàn)案例8. 資深程序員:給Python軟件開(kāi)發(fā)測(cè)試的25個(gè)忠告!9. vscode運(yùn)行php報(bào)錯(cuò)php?not?found解決辦法10. 如何從Python的cmd中獲得.py文件參數(shù)

網(wǎng)公網(wǎng)安備