更新時間:2021-03-03 來源:黑馬程序員 瀏覽量:
在Python中,使用raise語句能顯式地觸發(fā)異常,基本格式如下:
raise 異常類 #引發(fā)異常時會隱式地創(chuàng)建類對象 raise 異常類對象 #引發(fā)異常類實例對象對應(yīng)的異常 raise #重新引發(fā)剛剛發(fā)生的異常
在上述格式中,第1種方式和第2種方式是對等的,都會引發(fā)指定異常類對象。但是,第1種方式隱式地創(chuàng)建了異常類的實例,而第2種形式是最常見的,直接會提供一個異常類的實例。第3種方式用于重新引發(fā)剛剛發(fā)生的異常。
1、使用類名引發(fā)異常
當(dāng)raise語句指定異常的類名時,會創(chuàng)建該類的實例對象,然后引發(fā)異常。例如:
raise IndexError
程序運行的結(jié)果如下:
Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 1, in <module> raise IndexError IndexError
2、使用異常類的實例引發(fā)異常
通過顯式地創(chuàng)建異常類的實例,直接使用該實例對象來引發(fā)異常。例如:
index_error = IndexError() raise index_error
程序運行的結(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("出錯了") raise
上述示例中,try里面使用raise拋出了IndexError 異常,程序會跳轉(zhuǎn)到except子句中執(zhí)行
輸出打印語句,然后使用raise再次引發(fā)剛剛發(fā)生的異常,導(dǎo)致程序出現(xiàn)錯誤而終止運行。程運行的結(jié)果如下:
Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 2, in <module> raise IndexError IndexError 出錯了
4.指定異常的描述信息
當(dāng)使用raise語句拋出異常時,還能給異常類指定描述信息。例如:
raise IndexError("索引下標(biāo)超出范圍")
上述示例中,在拋出異常類時傳入了自定義的描述信息。程序的運行結(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ā)異常
如果要在異常中拋出另外一個異常,可以使用raise-from語句實現(xiàn)。例如:
try: number except Exception as exception: raise IndexError("下標(biāo)超出范圍") from exception
上述示例中,try里面只定義了變量number,并沒有為其賦值,所以會引發(fā)NameError異
常,使得程序跳轉(zhuǎn)到except子句中執(zhí)行。except子句能捕捉所有的異常,并且使用raise-from語句拋出NameError異常后再拋出“ 下標(biāo)超出范圍”的異常。程序的運行結(jié)果如下:
Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 1, in <module> raise IndexError("索引下標(biāo)超出范圍") IndexError: 索引下標(biāo)超出范圍
猜你喜歡
【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19【AI大模型開發(fā)-Python】畢業(yè)33個工作日,就業(yè)率已達(dá)到94.55%,班均薪資20763元
2025-09-19【AI智能應(yīng)用開發(fā)-Java】畢業(yè)當(dāng)天offer率91%,薪資1W+占比54.2%,班級均薪12k+
2025-09-19