Python學習——異常

來源:互聯網
上載者:User
異常

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

try..except

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

import systry:    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

我們把所有可能引發錯誤的語句放在try塊中,然後在except從句/塊中處理所有的錯誤和異常。
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 = atleasttry:    s = raw_input('Enter something --> ')    if len(s) < 3:        raise ShortInputException(len(s), 3)except EOFError:    print '\nWhy did you do an EOF on me?'except ShortInputException, x:    print 'ShortInputException: The input was of length %d, \          was expecting at least %d' % (x.length, x.atleast)else:    print 'No exception was raised.'

輸出:

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 timef = file('poem.txt')try:      while True:        line = f.readline()        if len(line) == 0:            break        time.sleep(2)        print line,finally:    f.close()    print 'Cleaning up...closed the file'

輸出:

Python代碼

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

我們進行通常的讀檔案工作,但是我有意在每列印一行之前用time.sleep方法暫停2秒鐘。這樣做的原因是讓程式運行得慢一些(Python由於其本質通常運行得很快)。在程式啟動並執行時候,按Ctrl-c中斷/取消程式。我們可以觀察到KeyboardInterrupt異常被觸發,程式退出。但是在程式退出之前,finally從句仍然被執行,把檔案關閉。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.