Python異常學(xué)習(xí)筆記
異常(exceptions)是Python中一種非常重要的類型,它和語法錯誤不同,是在程序運(yùn)行期間引發(fā)的錯誤。Python中內(nèi)置了很多異常,如IOError,NameError,KeyboardInterrupt等,更多的異??梢?a target="_blank" >點(diǎn)擊這里。
異常的意義在于提供一種更加優(yōu)雅的運(yùn)行方式,例如用Python編寫一個計算器,如果用戶輸入不能計算的對象,則可以拋出異常,并進(jìn)行處理, 如下:
while True:
try:
x= int(input('Please In enter A number:'))
print "Your Input is %s"%x
break
except Exception,e:
print e
Python是一門面向?qū)ο蟮恼Z言,異常本身也是對象, 用dir(Exception)查看Exception類的屬性,如下:[‘__class__', ‘__delattr__', ‘__dict__', ‘__doc__', ‘__format__', ‘__getattribute__', ‘__getitem__', ‘__getslice__', ‘__hash__', ‘__init__', ‘__new__', ‘__reduce__', ‘__reduce_ex__', ‘__repr__', ‘__setattr__', ‘__setstate__', ‘__sizeof__','__str__', ‘__subclasshook__', ‘__unicode__', ‘a(chǎn)rgs', ‘message'], 除開args和message外,其余的均為其內(nèi)部屬性, 其中args是傳遞給異常類的構(gòu)造函數(shù)的一個類型為元祖的參數(shù), 一些內(nèi)置函數(shù),如IOError需要它接收多個參數(shù),其它的則直接是直接傳遞一個錯誤提示字符串。
Python的異??梢酝ㄟ^try語句來檢查,任何在try語句塊里的代碼都會被監(jiān)測,檢查有無異常產(chǎn)生,except會根據(jù)輸入檢查異常的類型,并執(zhí)行except內(nèi)的代碼。那么,這里就不禁要問問,except后面的兩個參數(shù)到底是什么?如果第一個是錯誤的類型,那么第二參數(shù)呢?對其進(jìn)行檢測,發(fā)現(xiàn)它是屬于Exception的實例,也就是說,它是由異常類產(chǎn)生的一個具體的異常對象。
那么,用戶如果自定義一個異常呢?Python中規(guī)定,所有異常必須直接或者間接的繼承自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('Error: need 1 arguments at last, 0 Input')
把這個文件保存為showname.py,其它模塊就可以引入調(diào)用showname函數(shù),并對它執(zhí)行的結(jié)果進(jìn)行檢測:
#!/usr/bin/env python import showname try: showname.showname() except showname.MyError,e: print e
值得注意的幾點(diǎn)是:1, python中用raise拋出異常; 2, 由于所有異常都是繼承自Exception,所以,當(dāng)不確定異常類型的時候,可以在except后面直接接Exception來捕獲所有異常;3,由于異常的繼承關(guān)系,異常內(nèi)的所有屬性都是可以被重定義的,也可以在自定義的異常上增加屬性。
相關(guān)文章
淺談TensorFlow中讀取圖像數(shù)據(jù)的三種方式
這篇文章主要介紹了淺談TensorFlow中讀取圖像數(shù)據(jù)的三種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Python標(biāo)準(zhǔn)庫使用OrderedDict類的實例講解
今天小編就為大家分享一篇關(guān)于Python標(biāo)準(zhǔn)庫使用OrderedDict類的實例講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
Python利用SMTP發(fā)送郵件的常見問題與解決方案詳解
在自動化辦公和系統(tǒng)開發(fā)中,郵件發(fā)送功能是常見的需求,本文將從實際案例出發(fā),分析常見的SMTP錯誤,并提供完整的解決方案,希望對大家有一定的幫助2025-04-04
python中isoweekday和weekday的區(qū)別及說明
這篇文章主要介紹了python中isoweekday和weekday的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07

