python異常處理

2022-06-08 22:26:16 字數 4072 閱讀 2183

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...