全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

python raise拋出異常的3種形式

更新時(shí)間:2021-03-03 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

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

 

raise 異常類(lèi)     #引發(fā)異常時(shí)會(huì)隱式地創(chuàng)建類(lèi)對(duì)象
raise 異常類(lèi)對(duì)象   #引發(fā)異常類(lèi)實(shí)例對(duì)象對(duì)應(yīng)的異常
raise         #重新引發(fā)剛剛發(fā)生的異常

 

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

 

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

當(dāng)raise語(yǔ)句指定異常的類(lèi)名時(shí),會(huì)創(chuàng)建該類(lèi)的實(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、使用異常類(lèi)的實(shí)例引發(fā)異常

通過(guò)顯式地創(chuàng)建異常類(lèi)的實(shí)例,直接使用該實(shí)例對(duì)象來(lái)引發(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語(yǔ)句,可以再次引發(fā)剛剛發(fā)生過(guò)的異常,作用就是向外傳遞異常。

例如:

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

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

輸出打印語(yǔ)句,然后使用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語(yǔ)句拋出異常時(shí),還能給異常類(lèi)指定描述信息。例如:

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

上述示例中,在拋出異常類(lèi)時(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語(yǔ)句實(shí)現(xiàn)。例如:

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

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

常,使得程序跳轉(zhuǎn)到except子句中執(zhí)行。except子句能捕捉所有的異常,并且使用raise-from語(yǔ)句拋出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)超出范圍


猜你喜歡

python常見(jiàn)異常類(lèi)型介紹

如何理解“?!??如何實(shí)現(xiàn)一個(gè)“?!?

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

黑馬程序員高級(jí)python培訓(xùn)班

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!