Python學習筆記(八)異常

2021-06-20 09:14:42 字數 3337 閱讀 8445

8異常

8.1什麼是異常

python用異常物件來表示異常情況。每乙個異常都是一些類的例項,這些例項可以被印發,並且可以用很多種方法進行捕捉並且對其進行處理,而不是讓整個程式失敗。

8.2按自己的方式出錯

8.2.1raise語句

為了引發異常,可以使用乙個類(可以是exception的子類)或者例項引數呼叫raise語句。

raise exception

traceback (mostrecent call last):

file "", line 1,in raise exception

exception

traceback (mostrecent call last):

第乙個例子引發了乙個沒有任何錯誤資訊的普通異常,後乙個例子中則新增了一些錯誤資訊。

8.2.2自定義異常類

就像其他類一樣,只要確保從exception類繼承,那麼編寫乙個自定義異常類基本上就像下面那樣:

8.3捕捉異常

為了捕捉異常並且做一些錯誤處理,可以這樣寫程式:

>>> x=1

>>> y=0

>>>

try:

x/yexceptzerodivisionerror:

print ("can not division 0")

can not division 0

如果捕捉到了乙個異常,又想重新引發它那,那麼可以呼叫不帶引數的raise。 通過這一點也可以實現一種遮蔽功能,例如zerodivisionerror,在功能啟用時遮蔽這個異常。

下面是這樣乙個類的**:

classmuffledcalculator:

run=false

def calc(self,expr):

try:

return eval(expr)

except zerodivisionerror:

if self.run:

print("somethingwrong")

else:

raise

用法例項:

a=muffledcalculator()

>>> a.calc('10/2')

5>>> a.calc('10/0')

traceback (most recent call last):

file "", line 1, in a.calc('10/0')

file "c:\users\ltianchao\desktop\python\5.py", line 5, in calc

return eval(expr)

file "", line 1, in zerodivisionerror: integer division ormodulo by zero

>>> a.run=true

>>> a.calc('10/0')

something wrong

8.4 不止乙個except語句

可以在同乙個try/except語句後加另乙個except語句:

class muffledcalculator:

run=false

def calc(self,expr):

try:

return eval(expr)

except zerodivisionerror:

if self.run:

print("somethingwrong")

else:

raise

except typeerror:

print("somethin wrong")

8.5也可以用同乙個塊捕捉多個異常

如果需要使用乙個塊捕捉多個異常,那麼可以將它們作為元祖列出:

try:

x=input()

y=input()

print(x/y)

except(zerodivisionerror,typeerror):

print("something is wrong")

8.6捕捉物件

如果想在except中訪問異常物件本身:比如希望程式繼續執行,又想把異常記錄下來:

try:

x=int(input())

y=int(input())

print(eval('x/y'))

except(zerodivisionerror,typeerror)as e:

print(e)

>>>10

division by zero

8.7真正的全捕捉

在except子句中忽略所有異常類,就可以捕捉所有異常

try:

x=int(input())

y=int(input())

print(eval('x/y'))

except:

print("something is wrong")

但是這樣做非常危險,它會隱藏程式設計師未想到並且未做好準備處理的錯誤。

8.8else子句

while true:

try:

x=int(input())

y=int(input())

print(x/y)

except:

print("please input again")

else:

break

>>>10

please input again11

1.0

8.9最後。。

最後,是finally子句。他可以用來在可能的異常後進行清理。它和try語句聯合使用:

x=none

try:

x=1/0

finally:

print("clean up")

del x

小結

異常物件

警告

引發異常

自定義異常類

捕捉異常

else子句

finally

Python學習筆記(八)異常

life is short,you need python bruce eckel environment 程式執行過程中可能碰到各種各樣的異常,如果未預設處理方式,程式將中斷執行。這裡記錄一些 python 中異常處理的內容。python 所有內建異常類參考python官方文件的內容,中文內容總結...

Python學習記錄八 異常

異常 python用異常物件 exception object 來表示異常情況。遇到錯誤後,會引發異常。如果異常物件並未被處理或捕捉,程式就會用所謂的回溯 traceback,一種錯誤資訊 終止執行。1 raise語句 raise exception traceback most recent ca...

Python學習筆記 第八章 異常

python用異常物件來表示異常情況,遇到錯誤後會引發異常。如果異常物件未被處理或捕捉,程式就會用所謂的回溯終止執行 使用乙個類 exception及其子類 或者類例項呼叫raise語句可以引發異常。python內建異常可以在exceptions模組中找到,可以使用dir列出模組內容 dir exc...