更新時(shí)間:2021-03-03 來源:黑馬程序員 瀏覽量:
在Python中,使用raise語句能顯式地觸發(fā)異常,基本格式如下:
raise 異常類 #引發(fā)異常時(shí)會(huì)隱式地創(chuàng)建類對(duì)象 raise 異常類對(duì)象 #引發(fā)異常類實(shí)例對(duì)象對(duì)應(yīng)的異常 raise #重新引發(fā)剛剛發(fā)生的異常
在上述格式中,第1種方式和第2種方式是對(duì)等的,都會(huì)引發(fā)指定異常類對(duì)象。但是,第1種方式隱式地創(chuàng)建了異常類的實(shí)例,而第2種形式是最常見的,直接會(huì)提供一個(gè)異常類的實(shí)例。第3種方式用于重新引發(fā)剛剛發(fā)生的異常。
1、使用類名引發(fā)異常
當(dāng)raise語句指定異常的類名時(shí),會(huì)創(chuàng)建該類的實(shí)例對(duì)象,然后引發(fā)異常。例如:
raise IndexError
程序運(yùn)行的結(jié)果如下:
Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 1, in <module> raise IndexError IndexError
2、使用異常類的實(shí)例引發(fā)異常
通過顯式地創(chuàng)建異常類的實(shí)例,直接使用該實(shí)例對(duì)象來引發(fā)異常。例如:
index_error = IndexError() raise index_error
程序運(yùn)行的結(jié)果如下:
Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 2, in <module> raise IndexError IndexError
3.傳遞異常
不帶任何參數(shù)的raise語句,可以再次引發(fā)剛剛發(fā)生過的異常,作用就是向外傳遞異常。
例如:
try: raise IndexError except: print("出錯(cuò)了") raise
上述示例中,try里面使用raise拋出了IndexError 異常,程序會(huì)跳轉(zhuǎn)到except子句中執(zhí)行
輸出打印語句,然后使用raise再次引發(fā)剛剛發(fā)生的異常,導(dǎo)致程序出現(xiàn)錯(cuò)誤而終止運(yùn)行。程運(yùn)行的結(jié)果如下:
Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 2, in <module> raise IndexError IndexError 出錯(cuò)了
4.指定異常的描述信息
當(dāng)使用raise語句拋出異常時(shí),還能給異常類指定描述信息。例如:
raise IndexError("索引下標(biāo)超出范圍")
上述示例中,在拋出異常類時(shí)傳入了自定義的描述信息。程序的運(yùn)行結(jié)果如下:
D:\bili_new\Scripts\python.exe C:/Users/itcast/PycharmProjects/bili_new/test.py Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 1, in <module> raise IndexError("索引下標(biāo)超出范圍") IndexError: 索引下標(biāo)超出范圍
5.異常引發(fā)異常
如果要在異常中拋出另外一個(gè)異常,可以使用raise-from語句實(shí)現(xiàn)。例如:
try: number except Exception as exception: raise IndexError("下標(biāo)超出范圍") from exception
上述示例中,try里面只定義了變量number,并沒有為其賦值,所以會(huì)引發(fā)NameError異
常,使得程序跳轉(zhuǎn)到except子句中執(zhí)行。except子句能捕捉所有的異常,并且使用raise-from語句拋出NameError異常后再拋出“ 下標(biāo)超出范圍”的異常。程序的運(yùn)行結(jié)果如下:
Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 1, in <module> raise IndexError("索引下標(biāo)超出范圍") IndexError: 索引下標(biāo)超出范圍
猜你喜歡