Python異常學(xué)習(xí)筆記
異常(exceptions)是Python中一種非常重要的類(lèi)型,它和語(yǔ)法錯(cuò)誤不同,是在程序運(yùn)行期間引發(fā)的錯(cuò)誤。Python中內(nèi)置了很多異常,如IOError,NameError,KeyboardInterrupt等,更多的異??梢?a target="_blank" >點(diǎn)擊這里。
異常的意義在于提供一種更加優(yōu)雅的運(yùn)行方式,例如用Python編寫(xiě)一個(gè)計(jì)算器,如果用戶(hù)輸入不能計(jì)算的對(duì)象,則可以?huà)伋霎惓#⑦M(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是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,異常本身也是對(duì)象, 用dir(Exception)查看Exception類(lèi)的屬性,如下:[‘__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'], 除開(kāi)args和message外,其余的均為其內(nèi)部屬性, 其中args是傳遞給異常類(lèi)的構(gòu)造函數(shù)的一個(gè)類(lèi)型為元祖的參數(shù), 一些內(nèi)置函數(shù),如IOError需要它接收多個(gè)參數(shù),其它的則直接是直接傳遞一個(gè)錯(cuò)誤提示字符串。
Python的異??梢酝ㄟ^(guò)try語(yǔ)句來(lái)檢查,任何在try語(yǔ)句塊里的代碼都會(huì)被監(jiān)測(cè),檢查有無(wú)異常產(chǎn)生,except會(huì)根據(jù)輸入檢查異常的類(lèi)型,并執(zhí)行except內(nèi)的代碼。那么,這里就不禁要問(wèn)問(wèn),except后面的兩個(gè)參數(shù)到底是什么?如果第一個(gè)是錯(cuò)誤的類(lèi)型,那么第二參數(shù)呢?對(duì)其進(jìn)行檢測(cè),發(fā)現(xiàn)它是屬于Exception的實(shí)例,也就是說(shuō),它是由異常類(lèi)產(chǎn)生的一個(gè)具體的異常對(duì)象。
那么,用戶(hù)如果自定義一個(gè)異常呢?Python中規(guī)定,所有異常必須直接或者間接的繼承自Exception類(lèi),如下,自定義的異常:
#!/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')
把這個(gè)文件保存為showname.py,其它模塊就可以引入調(diào)用showname函數(shù),并對(duì)它執(zhí)行的結(jié)果進(jìn)行檢測(cè):
#!/usr/bin/env python import showname try: showname.showname() except showname.MyError,e: print e
值得注意的幾點(diǎn)是:1, python中用raise拋出異常; 2, 由于所有異常都是繼承自Exception,所以,當(dāng)不確定異常類(lèi)型的時(shí)候,可以在except后面直接接Exception來(lái)捕獲所有異常;3,由于異常的繼承關(guān)系,異常內(nèi)的所有屬性都是可以被重定義的,也可以在自定義的異常上增加屬性。
相關(guān)文章
Python操作MongoDB數(shù)據(jù)庫(kù)的方法示例
這篇文章主要介紹了Python操作MongoDB數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了Python命令行模式下操作MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)連接、查找、刪除、排序等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Python 余弦相似度與皮爾遜相關(guān)系數(shù) 計(jì)算實(shí)例
今天小編就為大家分享一篇Python 余弦相似度與皮爾遜相關(guān)系數(shù) 計(jì)算實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
python?requests.post請(qǐng)求404問(wèn)題及解決方法
這篇文章主要介紹了python?requests.post請(qǐng)求404問(wèn)題,這里需要根據(jù)自己實(shí)際情況來(lái)分析當(dāng)前接口接收數(shù)據(jù)時(shí)使用的是什么格式,但目前一般的網(wǎng)站都開(kāi)始采用application/jsond的數(shù)據(jù)格式,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn)
這篇文章主要介紹了Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Python標(biāo)準(zhǔn)庫(kù)datetime?date模塊的詳細(xì)介紹
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)datetime?date模塊的詳細(xì)介紹,datetime是Python提供的操作日期和時(shí)間的標(biāo)準(zhǔn)庫(kù),主要有datetime.date模塊、datetime.time模塊及datetime.datetime模塊2022-07-07
Python中使用dwebsocket實(shí)現(xiàn)后端數(shù)據(jù)實(shí)時(shí)刷新
dwebsocket是Python中一款用于實(shí)現(xiàn)WebSocket協(xié)議的庫(kù),可用于后端數(shù)據(jù)實(shí)時(shí)刷新。在Django中結(jié)合使用dwebsocket和Channels,可以實(shí)現(xiàn)前后端的實(shí)時(shí)通信,支持雙向數(shù)據(jù)傳輸和消息推送,適用于實(shí)時(shí)聊天、數(shù)據(jù)監(jiān)控、在線(xiàn)游戲等場(chǎng)景2023-04-04

