python中异常的处理及断言,包括异常类型、异常捕获、主动跑出异常和断言
一、異常類型介紹
什么是異常?異常即是一個事件,該事件會在程序執行過程中發生,會影響程序的正常執行,一般情況下,在python無法正常處理程序時就會發生一個異常。異常是python對象,表示一個錯誤。當python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。
在python 中,所有的異常都是派生自BaseException類的實例,BaseException是所有異常的基類,下面四種是最常見的異常:
- SystemExit 解釋器請求退出
- KeyboardInterrupt 用戶中斷執行(通常是輸入^C)
- GeneratorExit 生成器(generator)發生異常來通知退出
- Exception 常規錯誤的基類
我們需要重點掌握Exception類,一般因代碼引起的錯誤,是我們可以控制的,其他異常基類我們了解即可,常見的Exception類異常類型舉例如下:
- AttributeError:屬性錯誤,特性引用和賦值失敗時會引發屬性錯誤
- NameError:試圖訪問的變量名不存在
- SyntaxError:語法錯誤,代碼形式錯誤
- IOError:一般常見于打開不存在文件時會引發IOError錯誤,也可以解理為輸出輸入錯誤
- KeyError:使用了映射中不存在的關鍵字(鍵)時引發的關鍵字錯誤
- IndexError:索引錯誤,使用的索引不存在,常索引超出序列范圍,什么是索引
- TypeError:類型錯誤,內建操作或是函數應于在了錯誤類型的對象時會引發類型錯誤
- ZeroDivisonError:除數為0,在用除法操作時,第二個參數為0時引發了該錯誤
- ValueError:值錯誤,傳給對象的參數類型不正確,像是給int()函數傳入了字符串數據類型的參數。
還有更多的異常類型,有興趣的可以查閱官網文檔或者百度查詢。
二、異常捕獲
1.try/except語法格式
捕捉異??梢允褂胻ry/except語句,如果你不想在異常發生時結束你的程序,只需在try里捕獲它,使用except在錯誤發生后運行處理動作。
語法格式如下:(注意:except中指定異常類型,可以指定一個也可以指定多個,也可以不指定,不指定時默認捕獲所有Exception類型的異常)
try:可能出現異常的代碼except 異常類型:捕獲到異常之后的處理方案 a = '這是-個測試異常的文本' print(b)#b沒有被定義 print(a) #輸出 Traceback (most recent call last):File "E:/python.py", line 2, in <module>print(b)#b沒有被定義 NameError: name 'b' is not defined上述例子中因為b沒有被定義,在打印時無法找到b,因此拋出了一個NameError導致后面的代碼無法繼續執行,那么我們來捕獲一下這個錯誤
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' try:# try有可能發生異常的代碼a = '這是一個測試異常的文本'print(b)except (NameError, FileNotFoundError): # 當捕獲到異常時處理的方案,可以有多個except,不指定異常類型,會捕獲所有異常print("這里有一個異常!")# except NameError: 指定捕捉異常NameError,其他的異常不會捕獲# except Exception as msg: # 不確定什么異常異常,用exception,或者直接不指定 # print(msg)print(a)運行結果:
這里有一個異常! 這是一個測試異常的文本Process finished with exit code 02.異常處理中的else和finally
在try/except語句中可以使用else和finally,try語句里的代碼沒有異常才會執行else里的語句,而finally語句是不管try里有沒有異常它都會執行
try:# try下面寫有可能會出現異常的代碼score = int(input("請輸入成績:"))# 因為input獲取的都是字符串,int()是強制轉換成int類型,英文字符等是無法轉換成int類型的字都會報錯 except Exception:# 處理異常之后的處理,print("用輸入的數據不符合規范,默認給0分")score = 0 else:# 代碼沒有出現異常,執行else中的代碼print("代碼沒有出現異常,執行else") finally:# 不管代碼有沒有出現異常都會去執行的代碼print("finally不管代碼有沒有出現異常都會去執行的代碼")print("分數錄入為:{}".format(score))運行結果:
請輸入成績:nine 用輸入的數據不符合規范,默認給0分 finally不管代碼有沒有出現異常都會去執行的代碼 分數錄入為:0Process finished with exit code 0三、主動拋出異常
異常捕獲后為什么還要主動去拋出一個異常呢?這是為了方便我們知道出現異常的具體情況,我們還可以自定義異常
語法格式:raise 異常類型(異常信息)
try:# try 有可能發生異常的代碼a = 1111print(b) except NameError as msg:print(msg)raise msg # 捕獲后運行不會報錯,再拋出就會看到異常 else: # try里面的代碼都是正常執行,沒有發生任何異常,就會執行這里print("程序運行正常!") finally:print("不管有沒有異常,我都會被執行!")運行結果:
name 'b' is not defined 不管有沒有異常,我都會被執行! Traceback (most recent call last):File "D:/learn/python18_http_request/exercise/test.py", line 15, in <module>raise msg # 捕獲后運行不會報錯,再拋出就會看到異常File "D:/learn/python18_http_request/exercise/test.py", line 12, in <module>print(b) NameError: name 'b' is not definedProcess finished with exit code 1在自動化測試中,我們只需要掌握如何捕獲異常如何拋出異常即可,自定義異常這里就不多作解釋,有興趣的可以自定百度。
四、斷言assert
什么是斷言?其實assert斷言就是用于判斷一個表達式,在表達式條件為 false 的時候觸發斷言異常,斷言可以在條件不滿足程序運行的情況下直接返回錯誤,而不必等待程序運行后出現崩潰的情況,例如我們的代碼只能在a>8時運行,可以先判斷當前是否符合條件。語法格式如下:
assert 表達式,提示信息 (也可以沒有提示信息)
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # assert:斷言 res1 = {'code': 1, 'msg': '登陸成功'} res2 = {'code': 0, 'msg': '登陸失敗'}# 加一個斷言,判斷結果是否如預期,如果與預期不一致,會報出斷言異常并打印提示信息 assert res1 == res2, '該用例不通過!'運行結果:
Traceback (most recent call last):File "D:/learn/python18_http_request/exercise/test.py", line 15, in <module>assert res1 == res2, '該用例不通過!' # 加一個斷言,判斷結果是否如預期,如果與預期不一致,會報出斷言異常并打印提示信息 AssertionError: 該用例不通過!Process finished with exit code 1我們也可以用try/except來捕獲這個斷言異常:
# assert:斷言 res1 = {'code': 1, 'msg': '登陸成功'} res2 = {'code': 0, 'msg': '登陸失敗'}# 用try--except捕獲斷言異常 try:assert res1 == res2 except AssertionError as e:print("編號A1用例不通過!")raise e # 處理異常后,拋出異常 else:print("編號A1用例通過!")運行結果:
編號A1用例不通過! Traceback (most recent call last):File "D:/learn/python18_http_request/exercise/test.py", line 18, in <module>raise e # 處理異常后,拋出異常File "D:/learn/python18_http_request/exercise/test.py", line 15, in <module>assert res1 == res2 AssertionErrorProcess finished with exit code 1結尾給大家推薦一個非常好的學習教程,希望對你學習Python有幫助!
Python基礎入門教程推薦:更多Python視頻教程-關注B站:Python學習者
Python爬蟲案例教程推薦:更多Python視頻教程-關注B站:Python學習者
總結
以上是生活随笔為你收集整理的python中异常的处理及断言,包括异常类型、异常捕获、主动跑出异常和断言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础入门必学内容:判断语句与
- 下一篇: 推荐两个非常实用的,Python装饰器