日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中异常的处理及断言,包括异常类型、异常捕获、主动跑出异常和断言

發(fā)布時間:2025/3/20 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中异常的处理及断言,包括异常类型、异常捕获、主动跑出异常和断言 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、異常類型介紹

什么是異常?異常即是一個事件,該事件會在程序執(zhí)行過程中發(fā)生,會影響程序的正常執(zhí)行,一般情況下,在python無法正常處理程序時就會發(fā)生一個異常。異常是python對象,表示一個錯誤。當(dāng)python腳本發(fā)生異常時我們需要捕獲處理它,否則程序會終止執(zhí)行。

在python 中,所有的異常都是派生自BaseException類的實例,BaseException是所有異常的基類,下面四種是最常見的異常:

  • SystemExit 解釋器請求退出
  • KeyboardInterrupt 用戶中斷執(zhí)行(通常是輸入^C)
  • GeneratorExit 生成器(generator)發(fā)生異常來通知退出
  • Exception 常規(guī)錯誤的基類

我們需要重點掌握Exception類,一般因代碼引起的錯誤,是我們可以控制的,其他異常基類我們了解即可,常見的Exception類異常類型舉例如下:

  • AttributeError:屬性錯誤,特性引用和賦值失敗時會引發(fā)屬性錯誤
  • NameError:試圖訪問的變量名不存在
  • SyntaxError:語法錯誤,代碼形式錯誤
  • IOError:一般常見于打開不存在文件時會引發(fā)IOError錯誤,也可以解理為輸出輸入錯誤
  • KeyError:使用了映射中不存在的關(guān)鍵字(鍵)時引發(fā)的關(guān)鍵字錯誤
  • IndexError:索引錯誤,使用的索引不存在,常索引超出序列范圍,什么是索引
  • TypeError:類型錯誤,內(nèi)建操作或是函數(shù)應(yīng)于在了錯誤類型的對象時會引發(fā)類型錯誤
  • ZeroDivisonError:除數(shù)為0,在用除法操作時,第二個參數(shù)為0時引發(fā)了該錯誤
  • ValueError:值錯誤,傳給對象的參數(shù)類型不正確,像是給int()函數(shù)傳入了字符串?dāng)?shù)據(jù)類型的參數(shù)。

還有更多的異常類型,有興趣的可以查閱官網(wǎng)文檔或者百度查詢。

二、異常捕獲

1.try/except語法格式

捕捉異常可以使用try/except語句,如果你不想在異常發(fā)生時結(jié)束你的程序,只需在try里捕獲它,使用except在錯誤發(fā)生后運行處理動作。

語法格式如下:(注意:except中指定異常類型,可以指定一個也可以指定多個,也可以不指定,不指定時默認(rèn)捕獲所有Exception類型的異常)

try:可能出現(xiàn)異常的代碼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導(dǎo)致后面的代碼無法繼續(xù)執(zhí)行,那么我們來捕獲一下這個錯誤

''' 學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' try:# try有可能發(fā)生異常的代碼a = '這是一個測試異常的文本'print(b)except (NameError, FileNotFoundError): # 當(dāng)捕獲到異常時處理的方案,可以有多個except,不指定異常類型,會捕獲所有異常print("這里有一個異常!")# except NameError: 指定捕捉異常NameError,其他的異常不會捕獲# except Exception as msg: # 不確定什么異常異常,用exception,或者直接不指定 # print(msg)print(a)

運行結(jié)果:

這里有一個異常! 這是一個測試異常的文本Process finished with exit code 0

2.異常處理中的else和finally

在try/except語句中可以使用else和finally,try語句里的代碼沒有異常才會執(zhí)行else里的語句,而finally語句是不管try里有沒有異常它都會執(zhí)行

try:# try下面寫有可能會出現(xiàn)異常的代碼score = int(input("請輸入成績:"))# 因為input獲取的都是字符串,int()是強(qiáng)制轉(zhuǎn)換成int類型,英文字符等是無法轉(zhuǎn)換成int類型的字都會報錯 except Exception:# 處理異常之后的處理,print("用輸入的數(shù)據(jù)不符合規(guī)范,默認(rèn)給0分")score = 0 else:# 代碼沒有出現(xiàn)異常,執(zhí)行else中的代碼print("代碼沒有出現(xiàn)異常,執(zhí)行else") finally:# 不管代碼有沒有出現(xiàn)異常都會去執(zhí)行的代碼print("finally不管代碼有沒有出現(xiàn)異常都會去執(zhí)行的代碼")print("分?jǐn)?shù)錄入為:{}".format(score))

運行結(jié)果:

請輸入成績:nine 用輸入的數(shù)據(jù)不符合規(guī)范,默認(rèn)給0finally不管代碼有沒有出現(xiàn)異常都會去執(zhí)行的代碼 分?jǐn)?shù)錄入為:0Process finished with exit code 0

三、主動拋出異常

異常捕獲后為什么還要主動去拋出一個異常呢?這是為了方便我們知道出現(xiàn)異常的具體情況,我們還可以自定義異常

語法格式:raise 異常類型(異常信息)

try:# try 有可能發(fā)生異常的代碼a = 1111print(b) except NameError as msg:print(msg)raise msg # 捕獲后運行不會報錯,再拋出就會看到異常 else: # try里面的代碼都是正常執(zhí)行,沒有發(fā)生任何異常,就會執(zhí)行這里print("程序運行正常!") finally:print("不管有沒有異常,我都會被執(zhí)行!")

運行結(jié)果:

name 'b' is not defined 不管有沒有異常,我都會被執(zhí)行! 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斷言就是用于判斷一個表達(dá)式,在表達(dá)式條件為 false 的時候觸發(fā)斷言異常,斷言可以在條件不滿足程序運行的情況下直接返回錯誤,而不必等待程序運行后出現(xiàn)崩潰的情況,例如我們的代碼只能在a>8時運行,可以先判斷當(dāng)前是否符合條件。語法格式如下:

assert 表達(dá)式,提示信息  (也可以沒有提示信息)

''' 學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' # assert:斷言 res1 = {'code': 1, 'msg': '登陸成功'} res2 = {'code': 0, 'msg': '登陸失敗'}# 加一個斷言,判斷結(jié)果是否如預(yù)期,如果與預(yù)期不一致,會報出斷言異常并打印提示信息 assert res1 == res2, '該用例不通過!'

運行結(jié)果:

Traceback (most recent call last):File "D:/learn/python18_http_request/exercise/test.py", line 15, in <module>assert res1 == res2, '該用例不通過!' # 加一個斷言,判斷結(jié)果是否如預(yù)期,如果與預(yù)期不一致,會報出斷言異常并打印提示信息 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用例通過!")

運行結(jié)果:

編號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

結(jié)尾給大家推薦一個非常好的學(xué)習(xí)教程,希望對你學(xué)習(xí)Python有幫助!

Python基礎(chǔ)入門教程推薦:更多Python視頻教程-關(guān)注B站:Python學(xué)習(xí)者

Python爬蟲案例教程推薦:更多Python視頻教程-關(guān)注B站:Python學(xué)習(xí)者

總結(jié)

以上是生活随笔為你收集整理的python中异常的处理及断言,包括异常类型、异常捕获、主动跑出异常和断言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。