更新時間: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ā)異常
當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.指定異常的描述信息
當使用raise語句拋出異常時,還能給異常類指定描述信息。例如:
raise IndexError("索引下標超出范圍")
上述示例中,在拋出異常類時傳入了自定義的描述信息。程序的運行結(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("索引下標超出范圍") IndexError: 索引下標超出范圍
5.異常引發(fā)異常
如果要在異常中拋出另外一個異常,可以使用raise-from語句實現(xiàn)。例如:
try: number except Exception as exception: raise IndexError("下標超出范圍") from exception
上述示例中,try里面只定義了變量number,并沒有為其賦值,所以會引發(fā)NameError異
常,使得程序跳轉(zhuǎn)到except子句中執(zhí)行。except子句能捕捉所有的異常,并且使用raise-from語句拋出NameError異常后再拋出“ 下標超出范圍”的異常。程序的運行結(jié)果如下:
Traceback (most recent call last): File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 1, in <module> raise IndexError("索引下標超出范圍") IndexError: 索引下標超出范圍
猜你喜歡