1、異常處理的定義spa
# 什麼是異常處理 異常就是程序運行中出現的錯誤,若是改錯誤沒有相應的處理機制 那麼這個錯誤就會拋出來,程序也會隨之中止運行 # 爲何要有異常處理 加強代碼的健壯性 try...except... # 如何使用
# 異常三部分: """ 1.報錯類型 2.錯誤信息的值 3.錯誤的定位信息 """
# 異常分類 """ 1.語法上的錯誤 2.邏輯上的錯誤 """
# 根據不一樣的錯誤類型來獲取 try: # d = {'name': 'jason'} # d['password'] a = 1 x l = [1,2,3,4] l[123] except NameError: print('變量未定義') except KeyError: print('字典鍵不存在') except IndexError: print('索引超出範圍') # 執行結果:變量未定義
萬能異常:code
# 萬能異常:都能返回報錯的信息 try: d = {'name': 'jason'} d['password'] # a = 1 # x # l = [1,2,3,4] # l[123] except Exception as e: # 將錯誤信息的值賦值給變量a print(e) """ x:name 'x' is not defined l[123]:list index out of range d['password'] :'password' """
# 我的建議異常不要頻繁使用 能儘可能不用就不用 僅僅只加載會出現報錯的幾個行代碼上下,try裏面的代碼越少越好
else 與finaly
try: d = {'name': 'jason'} d['password'] # a = 1 # x # l = [1,2,3,4] # l[123] print('haha') pass except Exception as e: print(e) else: print('當try裏面的代碼沒有報錯的狀況下走else') finally: print('不管前面有沒有報錯 我都會執行')
raise:主動拋出異常blog
class User: def __init__(self,name): self.__name = name def set_info(self,val): if not isinstance(val,str): raise TypeError('name字段必須是str類型') self.__name = val obj = User('simon') obj.set_info(123) # TypeError: name字段必須是str類型
assert:判定繼承
l = [1,2,3,4] assert len(l) < 0 # AssertionError
自定義異常:索引
class MyError(BaseException): def __init__(self,msg): self.msg = msg def __str__(self): return '<%s>'%self.msg raise MyError('我本身定義了一個異常')
總結:it
try: 可能報錯的代碼塊 except 異常類型 as 異常信息: print(異常信息) else: try監測的代碼沒有任何bug的狀況下才會走else內部代碼塊 finally: 不管是否出bug都會走finally內部的代碼塊 raise 主動拋出異常 raise TypeError('異常信息') assert 斷言 自定義異常 繼承BaseException 內部定義__str__來顯示報錯信息