圖片來(lái)源于網(wǎng)絡(luò)
在日常的程序開(kāi)發(fā)當(dāng)中鸿秆,我們肯定是會(huì)遇到一些異常的肮蛹。Python
有提供異常處理的方式——try/except
拜效,這篇博客就來(lái)分享一下使用方式抵怎。
try/except語(yǔ)法
try:
# 執(zhí)行代碼
except :
# 發(fā)生異常執(zhí)行的代碼
try
執(zhí)行步驟如下:
- 首先執(zhí)行
try
子代碼塊(在關(guān)鍵字 try 和關(guān)鍵字 except 之間的語(yǔ)句)浓恶; - 如果沒(méi)有異常發(fā)生玫坛,忽略 except 子句,try 子代碼塊執(zhí)行后結(jié)束包晰;
- 如果在執(zhí)行
try
子代碼塊的過(guò)程中發(fā)生了異常湿镀,那么try
子代碼塊剩下的部分將被忽略。如果異常的類(lèi)型和except
之后的名稱(chēng)相符伐憾,那么對(duì)應(yīng)的except
子代碼塊將被執(zhí)行勉痴。 - 如果一個(gè)異常沒(méi)有與任何的
except
匹配,那么這個(gè)異常將會(huì)傳遞給上層的try
中树肃。
在編寫(xiě)代碼的過(guò)程中蒸矛,一個(gè)try
可能會(huì)有多個(gè)except
子代碼塊,用來(lái)區(qū)分處理不同的異常情況胸嘴。
代碼示例
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Could not convert data to an integer.")
except:
print("Unexpected error:", sys.exc_info()[0])
raise
這個(gè)例子是以Python
讀寫(xiě)文件為例雏掠,分為三種情況,OS異常劣像、參數(shù)異常乡话、未知異常。
try/except...else語(yǔ)法
這個(gè)語(yǔ)法是try/except
的升級(jí)版本耳奕,else
子代碼是可選的語(yǔ)句绑青,但是必須放在try/except
的后面。
try:
# 執(zhí)行代碼
except :
# 發(fā)生異常執(zhí)行的代碼
else:
# 沒(méi)有異常時(shí)執(zhí)行的代碼
try-finally 語(yǔ)法
try-finally
語(yǔ)法無(wú)論是否發(fā)生異常都將執(zhí)行最后的代碼屋群,我個(gè)人認(rèn)為是try/except...else
的升級(jí)版闸婴。具體如下:
try:
# 執(zhí)行代碼
except :
# 發(fā)生異常執(zhí)行的代碼
else:
# 沒(méi)有異常時(shí)執(zhí)行的代碼
finally :
# 不管有沒(méi)有異常都會(huì)執(zhí)行的代碼