首頁技術文章正文

python raise拋出異常的3種形式

更新時間:2021-03-03 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif

Python中,使用raise語句能顯式地觸發(fā)異常,基本格式如下:

 

raise 異常類     #引發(fā)異常時會隱式地創(chuàng)建類對象
raise 異常類對象   #引發(fā)異常類實例對象對應的異常
raise         #重新引發(fā)剛剛發(fā)生的異常

 

在上述格式中,第1種方式和第2種方式是對等的,都會引發(fā)指定異常類對象。但是,第1種方式隱式地創(chuàng)建了異常類的實例,而第2種形式是最常見的,直接會提供一個異常類的實例。第3種方式用于重新引發(fā)剛剛發(fā)生的異常。

 

1、使用類名引發(fā)異常

當raise語句指定異常的類名時,會創(chuàng)建該類的實例對象,然后引發(fā)異常。例如:

raise IndexError

 

程序運行的結果如下:

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

程序運行的結果如下:

Traceback (most recent call last):
  File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 2, in <module>
    raise IndexError
IndexError

 

3.傳遞異常

不帶任何參數的raise語句,可以再次引發(fā)剛剛發(fā)生過的異常,作用就是向外傳遞異常。

例如:

try:
     raise IndexError
 
 except:
     print("出錯了")
     raise

上述示例中,try里面使用raise拋出了IndexError 異常,程序會跳轉到except子句中執(zhí)行

輸出打印語句,然后使用raise再次引發(fā)剛剛發(fā)生的異常,導致程序出現錯誤而終止運行。程運行的結果如下:

Traceback (most recent call last):
  File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 2, in <module>
    raise IndexError
IndexError
出錯了

4.指定異常的描述信息

當使用raise語句拋出異常時,還能給異常類指定描述信息。例如:

raise IndexError("索引下標超出范圍")

上述示例中,在拋出異常類時傳入了自定義的描述信息。程序的運行結果如下:

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語句實現。例如:

try:
     number
 except Exception as exception:
     raise IndexError("下標超出范圍") from exception

上述示例中,try里面只定義了變量number,并沒有為其賦值,所以會引發(fā)NameError異

常,使得程序跳轉到except子句中執(zhí)行。except子句能捕捉所有的異常,并且使用raise-from語句拋出NameError異常后再拋出“ 下標超出范圍”的異常。程序的運行結果如下:

Traceback (most recent call last):
  File "C:\Users\itcast\PycharmProjects\Chapter09\異常.py", line 1, in <module>
    raise IndexError("索引下標超出范圍")
IndexError: 索引下標超出范圍


猜你喜歡

python常見異常類型介紹

如何理解“?!保咳绾螌崿F一個“?!?

Python如何一行一行讀取txt文件?

黑馬程序員高級python培訓班

分享到:
在線咨詢 我要報名
和我們在線交談!