IT培訓(xùn)網(wǎng)
IT在線學(xué)習(xí)
1、try-except語(yǔ)句
在代碼中出現(xiàn)的異常,除了可以看到解釋器報(bào)錯(cuò)外,還可以捕獲并處理它們。在Python中使用try-except語(yǔ)句處理異常,語(yǔ)法格式如下:
try:
代碼塊1
except 異常名稱(chēng):
代碼塊2
try-except語(yǔ)句的工作流程如下:
①執(zhí)行在try和except之間的代碼塊1,如果發(fā)生了異常,則會(huì)根據(jù)異常類(lèi)型提交處理,這一過(guò)程為異常捕獲。
②如果發(fā)生except 后指定的異常,那么跳過(guò)代碼塊1中剩余的代碼,執(zhí)行except語(yǔ)句下面的代碼塊2。成功處理指定異常的過(guò)程稱(chēng)為異常處理。
③如果沒(méi)有發(fā)生指定的異常,那么執(zhí)行完try和except之間的代碼塊1后,跳過(guò)except語(yǔ)句下面的代碼塊2,繼續(xù)執(zhí)行后面的代碼。
下面是一個(gè)處理異常的示例,它讓用戶(hù)輸入兩個(gè)整數(shù),并求出這兩個(gè)整數(shù)相除的結(jié)果,由于用戶(hù)輸入的除數(shù)可能為零,除數(shù)為零就會(huì)發(fā)生異常(使用腳本模式運(yùn)行):
- x = int(input('請(qǐng)輸入被除數(shù):'))
- y = int(input('請(qǐng)輸入除數(shù):'))
- try:
- result = x / y
- print('結(jié)果為{}'.format(result))
- except ZeroDivisionError:
- print('除數(shù)不能為零')
- print('=' * 30) # 這一行用來(lái)確定程序運(yùn)行到哪了
輸入幾組數(shù)據(jù),測(cè)試運(yùn)行結(jié)果:
- 請(qǐng)輸入被除數(shù):10
- 請(qǐng)輸入除數(shù):5
- 結(jié)果為2.0
- ==============================
- 請(qǐng)輸入被除數(shù):10
- 請(qǐng)輸入除數(shù):0
- 除數(shù)不能為零
- ==============================
由此可知,如果程序發(fā)生了指定異常,并且成功將它捕獲,那么Python解釋器并不會(huì)報(bào)錯(cuò),而是跳過(guò)try和except之間的代碼塊,執(zhí)行except語(yǔ)句下面的的代碼塊。
2、else語(yǔ)句
在try-except語(yǔ)句塊中,還可以包含else語(yǔ)句,其語(yǔ)法格式如下:
try:
代碼塊1
except:
代碼塊2
else:
代碼塊3
當(dāng)未引發(fā)任何異常時(shí),執(zhí)行else代碼塊:
- try:
- x = int(input('請(qǐng)輸入被除數(shù):'))
- y = int(input('請(qǐng)輸入除數(shù):'))
- result = x / y
- except (ZeroDivisionError, ValueError): # 這里同時(shí)捕獲兩種異常
- print('除數(shù)不能為零, 且被除數(shù)與除數(shù)必須為數(shù)字')
- else:
- print('=' * 30)
- print('結(jié)果為{}'.format(result))
輸入一組數(shù)據(jù),運(yùn)行結(jié)果:
- 請(qǐng)輸入被除數(shù):10
- 請(qǐng)輸入除數(shù):5
- ==============================
- 結(jié)果為2.0
3、finally語(yǔ)句
Python中的finally用來(lái)做后續(xù)的“清理工作”,其語(yǔ)法格式如下:
try:
代碼塊1
except :
代碼塊2
finally :
代碼塊3
如果存在finally語(yǔ)句,無(wú)論try-except代碼塊是否發(fā)生錯(cuò)誤,finally代碼塊都將執(zhí)行:
- try:
- x = int(input('請(qǐng)輸入被除數(shù):'))
- y = int(input('請(qǐng)輸入除數(shù):'))
- result = x / y
- except (ZeroDivisionError, ValueError):
- print('除數(shù)不能為零, 且被除數(shù)與除數(shù)必須為數(shù)字')
- else:
- print('結(jié)果為{}'.format(result))
- finally:
- print('再見(jiàn)!')
當(dāng)發(fā)生異常時(shí),else代碼塊并沒(méi)有執(zhí)行,但是finally代碼塊執(zhí)行了:
- 請(qǐng)輸入被除數(shù):10
- 請(qǐng)輸入除數(shù):0
- 除數(shù)不能為零, 且被除數(shù)與除數(shù)必須為數(shù)字
- 再見(jiàn)!
當(dāng)未發(fā)生異常時(shí),else代碼塊執(zhí)行了,finally代碼塊也執(zhí)行了:
- 請(qǐng)輸入被除數(shù):10
- 請(qǐng)輸入除數(shù):5
- 結(jié)果為2.0
- 再見(jiàn)!
因此,當(dāng)存在try-except-else-finally語(yǔ)句時(shí),首先執(zhí)行try-except代碼塊;如果沒(méi)有異常,那么執(zhí)行else代碼塊,否則不執(zhí)行;而finally代碼塊無(wú)論怎樣都會(huì)執(zhí)行。
4、raise語(yǔ)句
raise語(yǔ)句用來(lái)拋出異常,可以自定義引發(fā)哪種錯(cuò)誤以及向用戶(hù)顯示文本。拋出自定義異常時(shí),可以在異常類(lèi)型后加上括號(hào),并在括號(hào)內(nèi)寫(xiě)出要顯示的文本。在下面的示例中,引發(fā)類(lèi)型異常時(shí),自定義的提示文本是“類(lèi)型不對(duì)”:
- >>> raise TypeError('類(lèi)型不對(duì)')
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- TypeError: 類(lèi)型不對(duì)
更多內(nèi)容
>>本文地址:http://uj2y2uok.com/zhuanye/2021/69065.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學(xué)歷
3 您更想做哪個(gè)方向的工作?
07月15日Java
咨詢(xún)/試聽(tīng)07月15日Python+人工智能
咨詢(xún)/試聽(tīng)07月15日Web前端
咨詢(xún)/試聽(tīng)07月15日UI設(shè)計(jì)
咨詢(xún)/試聽(tīng)07月15日大數(shù)據(jù)
咨詢(xún)/試聽(tīng)07月15日Java
咨詢(xún)/試聽(tīng)07月15日Python+人工智能
咨詢(xún)/試聽(tīng)07月15日Web前端
咨詢(xún)/試聽(tīng)07月15日UI設(shè)計(jì)
咨詢(xún)/試聽(tīng)07月15日大數(shù)據(jù)
咨詢(xún)/試聽(tīng)