python中的五種異常處理機制

這篇文章主要介紹了python中的五種異常處理機制介紹,本文是Learn Python一書的讀書筆記,需要的朋友可以參考下

從幾年前開始學習編程直到現在,一直對程序中的異常處理懷有恐懼和排斥心理。之所以這樣,是因爲不瞭解。這次攻python,首先把自己最畏懼和最不熟悉的幾塊內容列出來,裏面就有「異常處理」這一項。

《Dive into Python》並沒有專門介紹異常處理,只是例子中用到的時候略微說明了一下。今天下載《Learn Python》,直接進異常處理這塊。這一部分有四章,第一章講解異常處理的一般使用方法,後面的章節深入地討論其機制。我目前只看了第一章,先學會用,以後有必要的時候再擴展閱讀。

python主要支持五種異常機制,一一列舉。

默認的異常處理器

複製代碼代碼如下:

s = 'Hello girl!'
print s[100]
print 'continue'

如果我們沒有對異常進行任何預防,那麼在程序執行的過程中發生異常,就會中斷程序,調用python默認的異常處理器,並在終端輸出異常信息。這種情況下,第3行代碼不會執行。

try…except

複製代碼代碼如下:

s = 'Hello girl!'
try:
 print s[100]
except IndexError:
 print 'error...'
print 'continue'

程序執行到第2句時發現try語句,進入try語句塊執行,發生異常,回到try語句層,尋找後面是否有except語句。找到except語句後,會調用這個自定義的異常處理器。except將異常處理完畢後,程序繼續往下執行。這種情況下,最後兩個print語句都會執行。

except後面也可以爲空,表示捕獲任何類型的異常。

try…finally

複製代碼代碼如下:

s = 'Hello girl!'
try:
 print s[100]
finally:
 print 'error...'
print 'continue'

finally語句表示,無論異常發生與否,finally中的語句都要執行。但是,由於沒有except處理器,finally執行完畢後程序便中斷。這種情況下,倒第2個print會執行,到第1個不會執行。如果try語句中沒有異常,三個print都會執行。

assert

複製代碼代碼如下:

assert False,'error...'
print 'continue'

這個語句,先判斷assert後面緊跟的語句是True還是False,如果是True則繼續執行print,如果是False則中斷程序,調用默認的異常處理器,同時輸出assert語句逗號後面的提示信息。本例情況下,程序中斷,提示error,後面的print不執行。

with…as

複製代碼代碼如下:

with open('nothing.txt','r') as f:
 f.read()
 print 2/0
print 'continue'

我們平時在使用類似文件的流對象時,使用完畢後要調用close方法關閉,很麻煩。這裏with…as語句提供了一個非常方便的替代方法:open打開文件後將返回的文件流對象賦值給f,然後在with語句塊中使用。with語句塊完畢之後,會隱藏地自動關閉文件。

如果with語句或語句塊中發生異常,會調用默認的異常處理器處理,但文件還是會正常關閉。

這種情況下,會拋出異常,最後的print不執行。

書中介紹的很詳細,除了上面我提到的之外,還有很多有用的附加信息,比如try..except..finally..else可以連用,比如自定義異常類。這裏不再列出,詳情可以參考這本書中的介紹。

發佈了13 篇原創文章 · 獲贊 25 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章