異常(exceptions)是python中一種非常重要的型別,它和語法錯誤不同,是在程式執行期間引發的錯誤。python中內建了很多異常,如ioerror,nameerror,keyboardinterrupt等,更多的異常可以點選這裡。
異常的意義在於提供一種更加優雅的執行方式,例如用python編寫乙個計算器,如果使用者輸入不能計算的物件,則可以丟擲異常,並進行處理, 如下:
while true:
try:
x= int(input('please in enter a number:'))
程式設計客棧 print "your input is %s"%x
break
except exception,e:
print e
python是一門物件導向的語言,異常本身也是物件, 用dir(exception)檢視exception類的屬性,如下:[『__class__', 『__delattr__', 『__dict__', 『_程式設計客棧_doc__', 『__format__', 『__getattribute__', 『__getitem__', 『__getslice__', 『__hash__', 『__init__', 『__new__', 『__reduce__', 『__reduce_ex__', 『__repr__', 程式設計客棧『__setattr__', 『__setstate__', 『__sizeof__','__str__', 『__subclasshook__', 『__unicode__', 『args', 『message'], 除開args和message外,其餘的均為其內部屬性, 其中args是傳遞給異常類的建構函式的乙個型別為元祖的引數, 一些內建函式,如ioerror需要它接收多個引數,其它的則直接是直接傳遞乙個錯誤提示字串。
python的異常可以通過try語句來檢查,任何在try語句塊裡的**都會被監測,檢查有無異常產生,except會根據輸入檢查異常的型別,並執行except內的**。那麼,這裡就不禁要問問,except後面的兩個引數到底是什麼?如果第乙個是錯誤的型別,那麼第二引數呢?對其進行檢測,發現它是屬於exc程式設計客棧eption的例項,也就是說,它是由異常類產生的乙個具體的異常物件。
那麼,使用者如果自定義乙個異常呢?python中規定,所有異常必須直接或者間接的繼承自exception類,如下,自定義的異常:
#!/usr/bin/env python
class myerror(exception):
def __init__(self,*args):
self.value=args[0]
def __str__(self):
return repr(self.value)
def showname(*args):
if args:
print args
else:
raise myerror('e程式設計客棧rror: need 1 arguments at last, 0 input')
把這個檔案儲存為showname.py,其它模組就可以引入呼叫showname函式,並對它執行的結果進行檢測:
#!/usr/bin/env python
import showname
try:
showname.showname()
except showname.myerror,e:
print e
值得注意的幾點是:1, python中用raise丟擲異常; 2, 由於所有異常都是繼承自exception,所以,當不確定異常型別的時候,可以在except後面直接接exception來捕獲所有異常;3,由於異常的繼承關係,異常內的所有屬性都是可以被重定義的,也可以在自定義的異常上增加屬性。
本文標題: python異常學習筆記
本文位址:
Python 異常 學習筆記
python 標準異常總結 try 和 try finally 語句 try 下面是檢測範圍,如發生異常停止在第乙個異常的位置 fh open testfile w fh.write 這是乙個測試檔案,用於測試異常 except oserror as reason 下面是出現異常後輸出的 print...
Python學習筆記 異常
1 異常概念 程式在執行是,如果python直譯器遇到乙個錯誤,會停止程式的執行,並且提示一些錯誤資訊,這就是異常 程式停止執行並且提示錯誤資訊這個動作,我們稱之為 丟擲 raise 異常 程式開發是,很難將所有的特殊情況都處理的面面俱到,通過一異常捕獲可以針對突發事件做集中的處理,從而保證程式的穩...
python學習筆記 異常
baseexception systemexit keyboardinterrupt generatorexit exception stopiteration standarderror buffererror arithmeticerror floatingpointerror overflow...