藝賽旗.1版本 正在免費(fèi)下載使用中,歡迎下載使用
前言
程序設(shè)計(jì)總是會(huì)報(bào)錯(cuò)的,之前有談過幾次異常的處理,現(xiàn)在再來說一說:
什么是異常?
當(dāng) 檢測(cè)到一個(gè)錯(cuò)誤時(shí),解釋器就無法繼續(xù)執(zhí)行了,并且給出一個(gè)錯(cuò)誤提示。比如寫入文件的時(shí)候,磁盤滿了,寫不進(jìn)去了,或者從網(wǎng)絡(luò)抓取數(shù)據(jù),網(wǎng)絡(luò)突然中斷。這時(shí)候,就需要捕獲處理它,否則程序會(huì)終止執(zhí)行。
異常處理
使用 try// 語句進(jìn)行捕獲操作, 并告訴 發(fā)生異常時(shí)如何處理。
首先,檢測(cè) try 語句塊中的錯(cuò)誤, 語句捕獲異常信息并處理。如果在 try 子句執(zhí)行時(shí)沒有發(fā)生異常, 將執(zhí)行 else 語句后的語句,然后控制流通過整個(gè) try 語句。
如果在 try 后的語句里發(fā)生了異常,卻沒有匹配的 子句,異常將被遞交到上層的 try,或者到程序的最上層,并打印缺省的出錯(cuò)信息。
語法格式
try:
# 可能觸發(fā)異常的語句塊
: # 后面跟一個(gè)錯(cuò)誤類型自定義異常使用場(chǎng)景,當(dāng)代碼發(fā)生錯(cuò)誤且錯(cuò)誤類型符合的時(shí)候,就會(huì)執(zhí)行中的代碼,不寫具體錯(cuò)誤類型,表示接受任何類型的異常
# 這里執(zhí)行異常處理的相關(guān)代碼,打印輸出等
else:
# 如果沒有異常則執(zhí)行else中的代碼
:
# 不管代碼是否異常,都會(huì)執(zhí)行,一般是資源的關(guān)閉和釋放
excep 異常/錯(cuò)誤 as 別名,使用別名接收異常對(duì)象的錯(cuò)誤信息。
如何捕獲多個(gè)異常?
1. 寫出多行 異常/錯(cuò)誤,指定捕獲多個(gè)不同類型的異常。2. 使用 (異常1,異常2.),使用元組自定義異常使用場(chǎng)景,在一行中捕獲多個(gè)不同類型的異常。異常捕獲示例代碼:
try:
print(10/0)
:
print('出現(xiàn) 異常')
:
print('出現(xiàn) 異常')
:
print('出現(xiàn) 異常')
as e :
print('未知異常',e,type(e))
:
print('無論是否出現(xiàn)異常,該字句都會(huì)執(zhí)行')
拋出異常
我們使用 raise 語句觸發(fā)自定義異常。
語法格式:raise 異常類名(附加異常信息)示例代碼:
s = ""
try:
if len(s) > 10:
raise ("超過10個(gè)字符")
as err:
print(err)
自定義異常
系統(tǒng)的自帶的異常只要觸發(fā)就會(huì)自動(dòng)拋出,有時(shí)候,用戶自己決定什么時(shí)候拋出,并且給異常加上一些附加信息,這時(shí)候就可以使用自定義異常。
示例代碼:
# 自定義異常類,創(chuàng)建一個(gè)類繼承
class ():
pass
def add(a, b):
# a小于0,拋出異常
if a < 0:
raise ('自定義的異常')
a + b
print(add(-1, 5))
異常定義好之后,與內(nèi)置類的用法一樣,在需要的時(shí)候 raise 出來就可以了。
常見的使用異常的場(chǎng)景
?網(wǎng)絡(luò)請(qǐng)求相關(guān),比如網(wǎng)絡(luò)超時(shí)、連接異常等。?資源訪問相關(guān),比如文件的權(quán)限問題、文件的路徑、文件是否存在等。?代碼邏輯相關(guān),比如越界訪問、 等。