異常自己是類的實例spa
>>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
>>> a === 2 File "<stdin>", line 1 a === 2 ^ SyntaxError: invalid syntax
>>> a() Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
在 Python 中全部的異常都是繼承自 BaseException 直接分爲四大類:調試
代碼中會出現的異常都是 Exception 的子類, 所以在 except 中只須要在最後加上 Exception 便可 code
在捕獲異常的過程當中,會從上倒下依次對比異常,找到以後就不會再日後查找blog
try: print("-------------1------------") #有可能出錯的代碼 print(c) print("------------2-------------") except NameError as info: #在這裏用as 將捕獲到的異常 用一個變量保存 print("捕獲到了異常,會執行我下面的代碼對異常進行處理") print(info) #把捕獲的信息返回出去 else: print("沒有捕獲到異常執行我") finally: print("無論有沒有異常都會執行我") # 注意事項: # 1. try 下面放可能出錯的代碼 # 2. except try下面的代碼出錯後,會執行except下面的代碼 # 3. else try下面代碼沒有錯誤,執行else下面的代碼 # 4. finally 無論try下面的代碼有沒有出錯,始終都會執行 -------------1------------ 捕獲到了異常,會執行我下面的代碼對異常進行處理 name 'c' is not defined 無論有沒有異常都會執行我
class MyError(Exception): #自定義異常必須繼承於Exception pass raise MyError try: raise NameError #主動拋出異常 except NameError: print("報錯了") #raise 主動拋出異常 # 格式:raise 異常類型 # 注意:raise 是主動拋出後面寫的異常類型
assert 1 == 1 #條件成立往下運行 條件不成立報錯 print("======================") # 斷言語句是將調試斷言插入程序的一種便捷方式 # assert 的語法規則是: # 表達式返回 True 不報錯 # 表達式返回 False 報錯 報 AssertionError #斷言錯誤