今天的內容比較少,只是單獨的異常處理python
開始今日份整理程序員
1.異常spa
定義:異常時錯誤發生的信號,一旦出錯,而且程序沒有處理這個錯誤,就會拋出異常,而且程序會運行停止code
2.異常的分類blog
2.1語法錯誤:python會在運行以前,會先檢查語法是否錯誤,這個是程序員代碼中不該該出現的,須要時刻注意ip
2.2邏輯錯誤:(常見)input
3.異常的處理io
第一種方式:單分支機構,try………except………class
try: l1 = [1,2,3] l1[100] # IndexError print(333) print(5555) # dic = {'key1':'v1'} # dic['key2'] # KeyError print(777) except IndexError as e: print(e)
第二種方式:多分支機構,try .except except ....多支語法
try: l1 = [1,2,3] # l1[100] # IndexError print(333) print(5555) dic = {'key1':'v1'} # dic['key2'] # KeyError num = int(input('請輸入選項:')) print(777) except IndexError as e: print(e) except KeyError as e: print(e)
第三種方式:萬能異常 Exception
try: l1 = [1,2,3] # l1[100] # IndexError print(333) print(5555) dic = {'key1':'v1'} # dic['key2'] # KeyError num = int(input('請輸入選項:')) print(777) except Exception as e: print(e)
# 以上這三種分狀況討論:
# 1,若是你對報錯信息不關係,只是想直接跳過報錯而不分流執行代碼。 萬能異常最好。
# 2,若是你想要捕捉具體的錯誤信息,根據不一樣的錯誤執行不一樣的分支。多分支比較好
第四種方式:多分支加萬能異常
try: num = input('請輸入你要辦理的業務:').strip() num = int(num) menu_dict[num]() except ValueError: print('請輸入數字') except KeyError: print('超出範圍,請從新輸入') except Exception: print("出現未知錯誤.....")
第五種方式,主動觸發異常,以前有用過,
try: raise TypeError('類型錯誤') except Exception as e: print(e)
第六種方式,斷言,代碼完成有明確的結果
assert ('name' in info)and ('age' in info) #有着明確的結果
第七種方式,自定義異常類型,
畢竟異常的種類不是一成不變的,有可能異常的種類仍是一直在增長,這個時候就須要本身建立一個異常種類了
class PhoneconnectionError(BaseException):#手機鏈接失敗 pass try: raise PhoneconnectionError('鏈接錯誤...') except PhoneconnectionError as e: print(e)
最後的最後,在代碼中儘可能少用try開頭,except 結尾,這樣根本看不到本身的代碼有什麼問題。