1、try-except語句
在代碼中出現的異常,除了可以看到解釋器報錯外,還可以捕獲并處理它們。在Python中使用try-except語句處理異常,語法格式如下:
try:
代碼塊1
except 異常名稱:
代碼塊2
try-except語句的工作流程如下:
①執行在try和except之間的代碼塊1,如果發生了異常,則會根據異常類型提交處理,這一過程為異常捕獲。
②如果發生except 后指定的異常,那么跳過代碼塊1中剩余的代碼,執行except語句下面的代碼塊2。成功處理指定異常的過程稱為異常處理。
③如果沒有發生指定的異常,那么執行完try和except之間的代碼塊1后,跳過except語句下面的代碼塊2,繼續執行后面的代碼。
下面是一個處理異常的示例,它讓用戶輸入兩個整數,并求出這兩個整數相除的結果,由于用戶輸入的除數可能為零,除數為零就會發生異常(使用腳本模式運行):
- x = int(input('請輸入被除數:'))
- y = int(input('請輸入除數:'))
- try:
- result = x / y
- print('結果為{}'.format(result))
- except ZeroDivisionError:
- print('除數不能為零')
- print('=' * 30) # 這一行用來確定程序運行到哪了
輸入幾組數據,測試運行結果:
- 請輸入被除數:10
- 請輸入除數:5
- 結果為2.0
- ==============================
- 請輸入被除數:10
- 請輸入除數:0
- 除數不能為零
- ==============================
由此可知,如果程序發生了指定異常,并且成功將它捕獲,那么Python解釋器并不會報錯,而是跳過try和except之間的代碼塊,執行except語句下面的的代碼塊。
2、else語句
在try-except語句塊中,還可以包含else語句,其語法格式如下:
try:
代碼塊1
except:
代碼塊2
else:
代碼塊3
當未引發任何異常時,執行else代碼塊:
- try:
- x = int(input('請輸入被除數:'))
- y = int(input('請輸入除數:'))
- result = x / y
- except (ZeroDivisionError, ValueError): # 這里同時捕獲兩種異常
- print('除數不能為零, 且被除數與除數必須為數字')
- else:
- print('=' * 30)
- print('結果為{}'.format(result))
輸入一組數據,運行結果:
- 請輸入被除數:10
- 請輸入除數:5
- ==============================
- 結果為2.0
3、finally語句
Python中的finally用來做后續的“清理工作”,其語法格式如下:
try:
代碼塊1
except :
代碼塊2
finally :
代碼塊3
如果存在finally語句,無論try-except代碼塊是否發生錯誤,finally代碼塊都將執行:
- try:
- x = int(input('請輸入被除數:'))
- y = int(input('請輸入除數:'))
- result = x / y
- except (ZeroDivisionError, ValueError):
- print('除數不能為零, 且被除數與除數必須為數字')
- else:
- print('結果為{}'.format(result))
- finally:
- print('再見!')
當發生異常時,else代碼塊并沒有執行,但是finally代碼塊執行了:
- 請輸入被除數:10
- 請輸入除數:0
- 除數不能為零, 且被除數與除數必須為數字
- 再見!
當未發生異常時,else代碼塊執行了,finally代碼塊也執行了:
- 請輸入被除數:10
- 請輸入除數:5
- 結果為2.0
- 再見!
因此,當存在try-except-else-finally語句時,首先執行try-except代碼塊;如果沒有異常,那么執行else代碼塊,否則不執行;而finally代碼塊無論怎樣都會執行。
4、raise語句
raise語句用來拋出異常,可以自定義引發哪種錯誤以及向用戶顯示文本。拋出自定義異常時,可以在異常類型后加上括號,并在括號內寫出要顯示的文本。在下面的示例中,引發類型異常時,自定義的提示文本是“類型不對”:
- >>> raise TypeError('類型不對')
- Traceback (most recent call last):
- File "<stdin>", line 1, in <module>
- TypeError: 類型不對
更多內容
>>本文地址:http://m.jecan.cn/zhuanye/2021/69065.html
聲明:本站稿件版權均屬中公教育優就業所有,未經許可不得擅自轉載。
1 您的年齡
2 您的學歷
3 您更想做哪個方向的工作?