異常處理基本語法:spa
try: pass except Exception,ex: pass
經常使用異常種類:code
AttributeError 試圖訪問一個對象,沒有的屬性。好比foo.x,可是foo沒有屬性x IOError 輸入/輸出異常(基本上是沒法打開文件) ImportError 沒法引入模塊或包(基本上是路徑問題或名稱錯誤) IndentationError 語法錯誤的一種,代碼縮進不對 IndexError 下標索引超出序列邊界,好比當一個列表x只有三個元素,卻試圖訪問x[5] KeyError 試圖訪問字典裏不存在的鍵 KeyboardInterrupt Ctrl+C被按下 NameError 使用一個還沒有定義的變量 SyntaxError Python代碼非法,代碼不能編譯 TypeError 傳入對象類型與要求的不符合 UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是因爲另有一個同名的全局變量,致使你覺得正在訪問它 ValueError 傳入一個調用者不指望的值,即使值的類型是正確的。好比,你要將一個字符串轉換成數字:n='abc' int(n)
單個異常抓取:對象
data = {'id':123} try: data['name'] except KeyError as e: print('沒有這個key:',e)
多個異常抓取:blog
這種方法若是第一個錯了,就不會執行後面的異常處理。
data = {'id':123} list = [1,2] # 只會處理 KeyError ,後面的IndexError不會處理。 try: data['name'] list[3] except KeyError as e : print('沒有這個key:',e) except IndexError as e : print('列表操做錯誤:',e)
多個指定異常,返回同一個結果:索引
# 多個指定異常,返回同一個結果。 # 只要出現了其中任意一個就會返回。 data = {'id':123} list = [1,2] try: data['name'] list[3] except (IndexError,KeyError) as e: # 出現指定的錯誤時,執行。 print('出現了指定錯誤。')
萬能異常:字符串
無論出現什麼錯誤,都能獲取。不建議一開始就是用。it
data = {'id':123} list = [1,2] try: data['name'] list[3] except Exception as e: # 抓取任意異常 print('出現了錯誤。')
其餘異常結構:io
except Exception 出現非指定錯誤時,執行。編譯
else 沒有錯誤時,執行class
finally 無論有沒有錯,都執行。
data = {'id':123} list = [1,2] try: # data['name'] list['abc'] n = 1 except (IndexError,KeyError) as e: # 出現指定的錯誤時,執行。 print('出現了指定錯誤。') except Exception as e: # 出現非指定錯誤時,執行。 print('出現了非指定錯誤!未知錯誤',e) else: # 沒有錯誤時,執行。 print('一切正常,沒有錯誤。') finally: # 無論有沒有錯,都執行。 print('無論有沒有錯,都執行這個!')
主動觸發異常:
try: raise Exception('主動觸發了異常!') except Exception as e: print(e)
自定義異常:
class MyExceptin(Exception): def __init__(self, msg): self.msg = msg try: raise MyExceptin('自定義異常!') except MyExceptin as e: print(e)