首頁 >後端開發 >Python教學 >Python學習-異常

Python學習-異常

巴扎黑
巴扎黑原創
2016-12-09 14:05:161377瀏覽

異常

        當你的程式中出現某些異常的狀況的時候,異常就發生了。例如,當你想要讀某個文件的時候,而那個文件不存在。或者在程式運行的時候,你不小心把它刪除了。上述這些情況可以使用異常來處理。
        假如你的程式中有一些無效的語句,會怎麼樣呢? Python會引發並告訴你那裡有一個錯誤,從而處理這樣的情況。

try..except

        1.處理異常
        我們可以使用try..except語句來處理例外。我們把通常的語句放在try-區塊中,而把我們的錯誤處理語句放在except-區塊中。
        處理異常的例子如下:

import sys
try:
    s = raw_input('Enter something --> ')
except EOFError:
    print '\nWhy did you do an EOF on me?'
    sys.exit()
except:
    print '\nSome error/exception occurred.' 
print 'Done'

 輸出:

Python代碼  

Enter something --> +  
Done

    
        except子句可以專門處理單一的錯誤或異常,或一組包含在圓括號內的錯誤/異常。如果沒有給予錯誤或異常的名稱,它會處理所有的錯誤和異常。對於每個try從句,至少都有一個相關聯的except從句。
        若某個錯誤或異常無法處理,因此預設的Python處理器就會被呼叫。它會終止程式的運行,並且列印一個訊息,我們已經看到了這樣的處理。
        也可讓try..catch區塊關聯上一個else子句。當沒有異常發生的時候,else從句將會被執行。

        2.引發異常
        我們也可獲得異常對象,以獲得更多有這個異常的資訊。
        可使用raise語句引發異常。你還得指明錯誤/異常的名稱和伴隨異常觸發的異常物件。你可以引發的錯誤或異常應該分別是一個Error或Exception類別的直接或間接導出類別。
        如何引發異常的例子如下:

class ShortInputException(Exception):
    '''A user-defined exception class.'''
    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)
except EOFError:
    print &#39;\nWhy did you do an EOF on me?&#39;
except ShortInputException, x:
    print &#39;ShortInputException: The input was of length %d, \
          was expecting at least %d&#39; % (x.length, x.atleast)
else:
    print &#39;No exception was raised.&#39;

輸出:

Python代碼  

Enter something --> 2222  
No exception was raised.  
Enter something --> 1  
ShortInputException: The input was of length 1,           was expecting at least 3

 這裡,我們創建了我們自己的異常類型,其實我們可以使用任何預定義的/異常錯誤。這個新的異常類型是ShortInputException類別。它有兩個域:length是給定輸入的長度,atleast是程式期望的最小長度。
        在except子句中,我們提供了錯誤類別與用來表示錯誤/異常物件的變數。這與函數呼叫中的形參和實參概念類似。在這個特別的except從句中,我們使用異常物件的length和atleast域來為使用者列印一個恰當的訊息。

try..finally

        假如你在讀一個文件的時候,希望在無論異常發生與否的情況下都關閉文件,該怎麼做呢?這可以使用finally區塊來完成。請注意,在一個try區塊下,你可以同時使用except子句和finally區塊。如果你要同時使用它們的話,需要把一個嵌入另外一個。
        使用finally範例如下:

import time
f = file(&#39;poem.txt&#39;)
try:  
    while True:
        line = f.readline()
        if len(line) == 0:
            break
        time.sleep(2)
        print line,
finally:
    f.close()
    print &#39;Cleaning up...closed the file&#39;

 輸出:

Python代碼  

Programming is fun  
When the work is done  
if you wanna make your work also fun:  
        use Python!  
Cleaning up...closed the file

     這樣做的原因是讓程式運行得慢一些(Python由於其本質通常運行得很快)。在程式運行的時候,按Ctrl-c中斷/取消程式。我們可以觀察到KeyboardInterrupt異常被觸發,程式退出。但是在程式退出之前,finally從句仍然被執行,把檔案關閉。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn