溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python怎么捕獲代碼中所有異常

發(fā)布時(shí)間:2020-08-04 09:02:12 來源:億速云 閱讀:142 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了Python怎么捕獲代碼中所有異常,內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來看看吧。

問題

怎樣捕獲代碼中的所有異常?

解決方案

想要捕獲所有的異常,可以直接捕獲 Exception 即可:

try:
  ...
except Exception as e:
  ...
  log('Reason:', e)    # Important!

這個(gè)將會(huì)捕獲除了 SystemExitKeyboardInterruptGeneratorExit 之外的所有異常。 如果你還想捕獲這三個(gè)異常,將 Exception 改成 BaseException 即可。

討論

捕獲所有異常通常是由于程序員在某些復(fù)雜操作中并不能記住所有可能的異常。 如果你不是很細(xì)心的人,這也是編寫不易調(diào)試代碼的一個(gè)簡(jiǎn)單方法。

正因如此,如果你選擇捕獲所有異常,那么在某個(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í)候你就會(huì)撓頭想:“這咋回事?。俊?假如你像下面這樣重寫這個(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ū)惓鞑コ鋈ィ@樣不會(huì)丟失掉異常。

以上就是關(guān)于Python怎么捕獲代碼中所有異常的內(nèi)容,如果你們有學(xué)習(xí)到知識(shí)或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI