異常意味著出現錯誤,并且會中斷程序的正常控制流。
-
使用 raise 語句可以
引發異常
raise語句的一般格式:
raise Exception([value])
Exception是異常類型,而value是說明異常相關細節的可選值
例如:
raise RuntimeError('Unrecoverable Error')
-
使用 try...except...語句可以
捕獲異常
例如:
try:
f=open('test')
except IOError as e:
print '處理I/O錯誤'
? ? 出現異常時,解釋器將停止執行try代碼塊中的語句,并尋找可匹配該異常的except子句。如果找到,控制權就會傳遞給except子句中的第一條語句。執行完except子句后,控制權就會傳遞給出現try...except...代碼塊之后的第一條語句。否則,異常將傳遞給try語句所在的上一級代碼塊。
? ? ? ?except語句的可選修飾符as var提供了一個變量名稱。如果出現異常,就會在其中放置一個提供給raise語句的異常類型的實例。
注意事項:
# 在以前的版本(Python 2.6)使用下面的except語句,不推薦使用
except Exception , e:
pass
# 新的代碼使用as var語法:
except Exception as e:
pass
使用多條except子句指定多個異常處理代碼塊
try:
do something
except IOError as e:
# 處理I/O錯誤
except TypeError as e:
#處理類型錯誤
except NameError as e:
#處理名稱錯誤
或者
try:
do something
except (IOError,TypeError,NameError) as e:
# 處理I/O、類型或名稱錯誤
使用pass語句忽略異常,不做任何處理
try:
do something
except IOError:
pass
捕獲除與程序退出相關異常之外的所有異常
try:
do something
except Exception as e:
error_log.write("An error occurred : %s\n" %e)
使用except語句不帶任何異常類型,將會捕獲所有異常
try:
do something
except :
error_log.write("An error occurred \n")
try...except...else 語句
#如果try代碼塊中的代碼沒有引發異常,就會執行else子句中的所有代碼
try:
f=open('test','r')
except Exception, e:
error_log.write("Unable to open test : %s\n" % e)
else:
data=f.read()
f.close()
try...except...finally 語句
finally子句不用與捕獲,無論是否出現錯誤都會執行
try:
pass
except IOError as e:
raise e
finally:
pass