python異常處理

2021-08-20 21:49:00 字數 4783 閱讀 8381

當你的程式中出現某些

異常的狀況的時候,異常就發生了。例如,當你想要讀某個檔案的時候,而那個檔案不存在。或者在程式執行的時候,你不小心把它刪除了。上述這些情況可以使

用異常來處理。假如你的程式中有一些無效的語句,會怎麼樣呢?

python

會引發並告訴你那裡有乙個錯誤,從而處理這樣的情況。

考慮乙個簡單的

print

語句。假如我們把

print

誤拼為print

,注意大寫,這樣

python會引發

乙個語法錯誤。

>>>print 'hello world'

file"", line 1

print'hello world'

^syntaxerror:invalid syntax

>>>print 'hello world'

helloworld

我們可以觀察到有乙個

syntaxerror

被引發,並且檢測到的錯誤位置也被列印了出來。這是這個錯誤的

錯誤處理器

所做的工作。

try..except

我們嘗試讀取使用者的一段輸入。按

ctrl-d

,看一下會發生什麼。

>>>s = raw_input('enter something --> ')

entersomething --> traceback (most recent call last):

file"", line 1, in ?

eoferror

python

引發了乙個稱為

eoferror

的錯誤,這個錯誤基本上意味著它發現乙個不期望的

檔案尾(由

ctrl-d

表示)接下來,我們將學習如何處理這樣的錯誤。

處理異常

我們可以使用

try..except

語句來處理異常。我們把通常的語句放在

try-

塊中,而把我們的錯誤處理語句放在

except-

塊中。例

13.1

處理異常

#!/usr/bin/python

#filename: try_except.py

importsys

try:

s = raw_input('enter something--> ')

excepteoferror:

print '\nwhy did you do an eof onme?'

sys.exit() # exit the program

except:

print '\nsome error/exceptionoccurred.'

#here, we are not exiting the program

print'done'

輸出$python try_except.py

entersomething -->

whydid you do an eof on me?

$python try_except.py

entersomething --> python is exceptional!

done

它如何工作

我們把所有可能引發錯誤的語句放在

try塊中,然後在

except從句/

塊中處理所有的錯誤和異常。

except

從句可以專門處理單一的錯誤或異常,或者一組包括在圓括號內的錯誤

/異常。如果沒有

給出錯誤或異常的名稱,它會處理

所有的錯誤和異常。對於每個

try從句,至少都有乙個相關聯的

except

從句。如果某個錯誤或異常沒有被處理,預設的

python

處理器就會被呼叫。它會終止程式的執行,並且列印乙個訊息,我們已經看到了這樣的處理。

你還可以讓

try..catch

塊關聯上乙個

else

從句。當沒有異常發生的時候,

else

引發異常

你可以使用

raise

語句引發

異常。你還得指明錯誤

/異常的名稱和伴隨異常

觸發的異常物件。你可以引發的錯誤或異常應該分別是乙個

error

或exception

類的直接或間接匯出類。

如何引發異常

例13.2

如何引發異常

#!/usr/bin/python

#filename: raising.py

class shortinputexception(exception):

'''a user-defined exceptionclass.'''

def __init__(self, length, atleast):

exception.__init__(self)

self.length = length

self.atleast = atleast

try:

s = raw_input('enter something--> ')

if len(s) < 3:

raise shortinputexception(len(s),3)

# other work can continue as usualhere

except eoferror:

print '\nwhy did you do an eof onme?'

except shortinputexception, x:

print 'shortinputexception: theinput was of length %d, \

wa***pecting at least %d' % (x.length, x.atleast)

else:

print 'no exception was raised.'

輸出$python raising.py

entersomething -->

whydid you do an eof on me?

$python raising.py

entersomething --> ab

shortinputexception:the input was of length 2, was expecting at least 3

$python raising.py

entersomething --> abc

noexception was raised.

它如何工作

這裡,我們建立了我們自己的異常型別,其實我們可以使用任何預定義的異常

/錯誤。這個新的異常型別是

shortinputexception

類。它有兩個域——

length

是給定輸入的長度,

atleast

則是程式

期望的最小長度。在

except

從句中,我們提供了錯誤類和用來表示錯誤

/異常物件的變數。這與函式呼叫中的形參和實參概念類似。在這個特別的

except

從句中,我們使用異常物件的

length

和atleast

域來為使用者列印乙個恰當的訊息。

try..finally

假如你在讀乙個檔案的時候,希望在無論異常發生與否的情況下都關閉檔案,該怎麼做呢?這可以使用

finally

塊來完成。注意,在乙個

try塊下,你可以同時使用

except

從句和finally

塊。如果

你要同時使用它們的話,需要把乙個嵌入另外乙個。

使用finally

例13.3

使用finally

#!/usr/bin/python

#filename: finally.py

import time

try:

f = file('poem.txt')

while true: # our usual file-readingidiom

line = f.readline()

if len(line) == 0:

break

time.sleep(2)

print line,

finally:

f.close()

print'cleaning up...closed the file'

輸出$python finally.py

programmingis fun

whenthe work is done

cleaningup...closed the file

traceback(most recent call last):

file"finally.py", line 12, in ?

time.sleep(2)

keyboardinterrupt

它如何工作

我們進行通常的讀檔案工作,但是我有意在每列印一行之前用

time.sleep

方法暫停

2秒鐘。這樣做的原因是讓程式執行得慢一些(

python

由於其本質通常執行得很快)。在程式執行的時候,

按ctrl-c中斷/

取消程式。我們可以觀察到

keyboardinterrupt

異常被觸發,程式退出。但是在程式退出之前,

finally

從句仍然被執行,把檔案關閉

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