title: python異常處理
data: 2018-4-6
categories:
有時候寫程式的時候,會出現一些錯誤或異常,導致程式終止。例如,做除法時,除數為0,會引起乙個zerodivisionerror
a=10
b=0c=a/b
print("done")
執行結果:
traceback (most recent call last):
...zerodivisionerror: division by zero
發現程式因為 zerodivisionerror 而中斷了,語句 print("done") 沒有執行。為了處理異常,使用 try...except,更改**:
a=10
b=0try:
c=a/b
print(c)
except (zerodivisionerror, typeerror) as e:
print(e)
print("done")
執行結果:
division by zero
done
這樣程式就不會因為異常而中斷,從而 print("done") 語句正常執行。
把可能發生錯誤的語句放在 try 模組裡,用 except 來處理異常。except 可以處理乙個專門的異常,也可以處理一組圓括號中的異常,如果 except 後沒有指定異常,則預設處理所有的異常。每乙個 try,都必須至少有乙個 except
處理一組異常可以這樣寫(其中e代表異常的例項):
try:
pass
except (ioerror, zerodivisionerror) as e:
print(e)
異常名稱
描述exception
所有異常的基類
attributeerror
特徵引用或者賦值失敗時引發的
ioerror
試圖打在不存在的檔案(包括其他情況)
indexerror
使用序列中不存在的索引
keyerror
使用對映中不存在的鍵
nameerror
找不到名字(變數)
syntaxerror
在**為錯誤形式時引發
systemexit
系統異常退出
typeerror
在內建操作或者函式應用與錯誤型別的物件時
valueerror
正確的型別物件,但是物件使用不合適的值
zerodivisionerror
除法,第二引數為0
基本形式:
try:
需要執行的操作
except 異常類 as e:
如果發生異常,執行以下**
else:
如果沒有發生異常,執行的命令
finally:
無論如何,都要執行的**
示例:
try:
name = input('please input your name: ')
print('hello %s' %name)
print(10/0)
except exception as e:
print('got an error ', e)
else:
print('ok')
finally:
print('game over')
please input your name: zhong
hello zhong
got an error division by zero
game over
再舉個例子:
import urllib.request
def main():
try:
response = urllib.request.urlopen("")
# response = urllib.request.urlopen("")
except exception as e:
# raise
print(e)
else:
print('無異常則執行,有異常就不執行')
finally:
print('不管怎樣,最後總會執行這行**')
if __name__ == '__main__':
main()
結果:
不管怎樣,最後總會執行這行**
[finished in 21.5s]
方法一:
try:
需要執行的操作
except 異常類1 as e:
如果發生異常類1,執行以下**
except 異常類2 as f:
如果發生異常類2,執行以下**
else:
如果沒有發生異常,執行的命令
finally:
無論如何,都要執行的**
方法二:
try:
需要執行的操作
except (異常類1,異常2,異常3) as e:
如果發生異常,執行以下**
else:
如果沒有發生異常,執行的命令
finally:
無論如何,都要執行的**
raise 關鍵字可以自主丟擲異常,規則如下:
raise nameerror([str])
>>> raise nameerror()
traceback (most recent call last):
file "", line 1, in nameerror
>>> raise nameerror('bad name')
traceback (most recent call last):
file "", line 1, in nameerror: bad name
例如:
# 當你輸入的不是整數,它會報錯(valueerror),但你輸入的是乙個整數後,它會輸出你輸入的整數。
q = input("請輸入乙個整數:")
if type(q) != type(1):
raise valueerror
else:
print(q)
q = input("請輸入乙個整數:")
if type(q) != type(1):
raise leixingerror("型別錯誤!")
else:
print(q)
except
語句不是必須的,finally
語句也不是必須的,但是二者必須要有乙個,否則就沒有try
的意義了。
except
語句可以有多個,python會按except
語句的順序依次匹配你指定的異常,如果異常已經處理就不會再進入後面的except
語句。
except
語句可以以元組形式同時指定多個異常,參見例項**。
except
語句後面如果不指定異常型別,則預設捕獲所有異常,你可以通過logging或者sys模組獲取當前異常。
如果要捕獲異常後要重複丟擲,請使用raise
,後面不要帶任何引數或資訊。
不建議捕獲並丟擲同乙個異常,請考慮重構你的**。
不建議在不清楚邏輯的情況下捕獲所有異常,有可能你隱藏了很嚴重的問題。
盡量使用內建的異常處理語句來替換try/except
語句,比如with
語句,getattr()
方法。
python異常處理 Python 異常處理
使用者輸入不完整 比如輸入為空 或者輸入非法 輸入不是數字 異常就是程式執行時發生錯誤的訊號,在python中,錯誤觸發的異常如下 在python中不同的異常可以用不同的型別 python中統一了類與型別,型別即類 去標識,不同的類物件標識不同的異常,乙個異常標識一種錯 觸發indexerror 觸...
python異常舉例 Python異常處理
1.1異常問題舉例 例一 i input 請輸入數字 請輸入數字 0 print i print 5 int i traceback most recent call last file line 1,in zerodivisionerror division by zero 上述 的報錯是除零的錯...
python異常處理
當你的程式中出現異常情況時就需要異常處理。比如當你開啟乙個不存在的檔案時。當你的程式中有一些無效的語句時,python會提示你有錯誤存在。下面是乙個拼寫錯誤的例子,print寫成了print。python是大小寫敏感的,因此python將引發乙個錯誤 print hello world file l...