最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python自定義異常類方式

 更新時(shí)間:2023年08月12日 08:39:58   作者:編程小段  
這篇文章主要介紹了python自定義異常類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python自定義異常類

why?

在開發(fā)中一般是禁止寫if···else···的,雖然if···else···很好理解,但那樣顯得代碼不專業(yè),而且有時(shí)候會(huì)有點(diǎn)冗余!

what?

在python中一般都有一個(gè)異常類,這里面有一些自帶的異常,比如:TypeError、ValueError 等,但這些遠(yuǎn)遠(yuǎn)不能滿足我們的需求,我們時(shí)常會(huì)定義自己的異常包,然后導(dǎo)入這個(gè)包,這樣就可以愉快的開發(fā)了,下面就來(lái)展示一下如何定義自己的異常類。

how?

我們想讓函數(shù)返回值不是我們想要的時(shí)候就拋出異常,我們完全可以用C語(yǔ)言的if···else··語(yǔ)句,但是為了演示我們是用python的try···except···,raise表示拋出異常,就是在返回值不等于True的時(shí)候就拋出異常

#一般都會(huì)讓異常繼承這個(gè)類,(或者是更高級(jí)的BaseException)
#默認(rèn)大家知道__init__和__str__
class NotEqual(Exception):
? ? def __init__(self, msg):
? ? ? ? self.msg = msg
? ? def __str__(self):
? ? ? ? return self.msg
class OPT():
? ? def test_suit(self, a):
? ? ? ? if a > 10:
? ? ? ? ? ? return True
? ? ? ? else:
? ? ? ? ? ? return False
? ? def test(self):
? ? ? ? try:
? ? ? ? ? ? if ( (True != self.test_suit(5)) or
? ? ? ? ? ? ? ? ?(True != self.test_suit(15)) ):
? ? ? ? ? ? #raise表示拋出異常,后面必須是定義過(guò)的異常類,
? ? ? ? ? ? #括號(hào)中的內(nèi)容是大家想讓程序打印的內(nèi)容
? ? ? ? ? ? ?? ?raise NotEqual("not equal")?? ?
? ? ? ? except NotEqual as e:
? ? ? ? ? ? print("{}".format(e))
if __name__ == '__main__':
? ? option = OPT()
? ? option.test()
#運(yùn)行結(jié)果
>>>$ python test.py
>>> ?not equal

程序結(jié)尾處的print表示打印到終端(屏幕)的內(nèi)容,在開發(fā)中我們還應(yīng)當(dāng)加上python的日志系統(tǒng)(self.logger.debug("……")),讓輸出的內(nèi)容打印到日志中,方便我們定位問(wèn)題。

注意:

本來(lái)True == False不是異常,只是一個(gè)非真值,但在這里我們將其處理成了異常,因?yàn)閜ython肯定沒(méi)有這樣的異常,所以我們必須在開始要定義一個(gè)異常類,這樣就可以用了。

python自定義異常捕獲

我們?cè)谔幚沓绦虍惓5臅r(shí)候,可能需要自己定義一些傳入的message,自己定義一些error對(duì)應(yīng)的error_code,在后續(xù)做異常統(tǒng)計(jì)的時(shí)候可以有自定義的數(shù)據(jù),這時(shí)候其實(shí)我們可以自定義異常捕獲類。

異常類一般都是繼承自Exception,自定義異常類如下:

class CustomException(Exception):
? ? """
? ? Customized Exception
? ? Exception raised for errors in the input salary.
? ? Attributes:
? ? ? ? msg ?-- error message
? ? ? ? code -- error attribution
? ? """
? ? msg, code = "", 0
? ? def __init__(self, **kwargs):
? ? ? ? for k, v in kwargs.items():
? ? ? ? ? ? setattr(self, k, v)
class UnknownException(CustomException):
? ? code = 100
class ItemClickFailedException(CustomException):
? ? """
? ? clickable item clicking failed
? ? """
? ? msg = "failed to click item"
? ? code = 1
class ItemNotFoundException(CustomException):
? ? """
? ? clickable item not found
? ? """
? ? msg = "clickable item not found"
? ? code = 2

定義了異常類之后,可以在程序可能出現(xiàn)這些異常的時(shí)候,raise這些異常

?def random_click(self, item, items) -> Info:
? ? ? if len(items) == 0:
? ? ? ? ? raise ItemClickFailedException()
? ? ? if not self.is_clickable(item):
? ? ? ? ? raise ItemClickFailedException(msg="item is not visible")
? ? ? item_attr, item_rect = self.click_item(item)
? ? ? return Info(result=True, area=item_attr, x=item_rect.center[0], y=item_rect.center[1], error=[])

并在相應(yīng)的時(shí)候去進(jìn)行捕獲

def click(self, item, items) -> ClickInfo:
?? ?error_list = []
?? ?try:
?? ??? ?result: ClickInfo = self.random_click(item, items)
?? ?except Exception as e:
?? ??? ?# 此時(shí)捕獲到的是具體的異常類實(shí)例
?? ??? ?error_list.append(e)
?? ?for error in error_list:
?? ??? ?print("msg={}, code={}".format(error.msg, error.code))

如果之前raise的異常是ItemNotFoundException,那將打印出

msg=item is not visible, code=2

如果raise的異常是ItemClickFailedException,那將打印出

msg=failed to click item, code=1

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python 實(shí)現(xiàn)局域網(wǎng)遠(yuǎn)程屏幕截圖案例

    Python 實(shí)現(xiàn)局域網(wǎng)遠(yuǎn)程屏幕截圖案例

    這篇文章主要介紹了Python 實(shí)現(xiàn)局域網(wǎng)遠(yuǎn)程屏幕截圖案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python列表元素常見操作簡(jiǎn)單示例

    Python列表元素常見操作簡(jiǎn)單示例

    這篇文章主要介紹了Python列表元素常見操作,結(jié)合簡(jiǎn)單示例形式分析了Python針對(duì)列表元素的打印、添加、刪除、修改、排序等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • 用Python進(jìn)行簡(jiǎn)單圖像識(shí)別(驗(yàn)證碼)

    用Python進(jìn)行簡(jiǎn)單圖像識(shí)別(驗(yàn)證碼)

    這篇文章主要為大家詳細(xì)介紹了用Python進(jìn)行簡(jiǎn)單圖像識(shí)別驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python2.7下安裝Scrapy框架步驟教程

    Python2.7下安裝Scrapy框架步驟教程

    本篇文章主要介紹了Python2.7下安裝Scrapy框架步驟教程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • python的類變量和成員變量用法實(shí)例教程

    python的類變量和成員變量用法實(shí)例教程

    這篇文章主要介紹了python的類變量和成員變量用法,是學(xué)習(xí)Python程序設(shè)計(jì)所必須牢固掌握的,需要的朋友可以參考下
    2014-08-08
  • 菜鳥使用python實(shí)現(xiàn)正則檢測(cè)密碼合法性

    菜鳥使用python實(shí)現(xiàn)正則檢測(cè)密碼合法性

    本文給大家分享了2則使用Python實(shí)現(xiàn)正則表達(dá)式檢測(cè)密碼合法性的代碼,由于是新手,所以方法比較笨,不過(guò)還是分享給小伙伴,希望對(duì)大家能夠有所幫助。
    2016-01-01
  • Python實(shí)現(xiàn)批量將MP3音頻轉(zhuǎn)為WAV格式詳解

    Python實(shí)現(xiàn)批量將MP3音頻轉(zhuǎn)為WAV格式詳解

    這篇文章主要介紹了通過(guò)Python實(shí)現(xiàn)將MP3音頻轉(zhuǎn)為WAV格式的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,感興趣的可以了解一下
    2021-12-12
  • 十行Python3代碼實(shí)現(xiàn)去除pdf文件水印

    十行Python3代碼實(shí)現(xiàn)去除pdf文件水印

    pfd文檔一般無(wú)法直接去除水印,需要先將pfd文檔轉(zhuǎn)換成圖片,在逐一對(duì)圖片進(jìn)行水印去除操作,最后在把圖片插入到pdf文檔中,這樣就很繁瑣。本文將用十行Python3代碼輕輕松松實(shí)現(xiàn)PDF文件水印去除,快來(lái)了解一下吧
    2022-02-02
  • Python 如何將MP4文件轉(zhuǎn)為GIF圖片

    Python 如何將MP4文件轉(zhuǎn)為GIF圖片

    這篇文章主要介紹了Python 如何將MP4文件轉(zhuǎn)為GIF圖片,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-05-05
  • Python填充任意顏色,不同算法時(shí)間差異分析說(shuō)明

    Python填充任意顏色,不同算法時(shí)間差異分析說(shuō)明

    這篇文章主要介紹了Python填充任意顏色,不同算法時(shí)間差異分析說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05

最新評(píng)論

合作市| 南丹县| 泾源县| 柳州市| 景宁| 卢湾区| 乐山市| 黔东| 湖北省| 青神县| 长顺县| 元谋县| 且末县| 洱源县| 双桥区| 眉山市| 沐川县| 镇平县| 信丰县| 屯留县| 陆良县| 孟连| 荆州市| 枞阳县| 黔南| 大渡口区| 德安县| 化隆| 长垣县| 高陵县| 安吉县| 喀喇| 淮阳县| 宝坻区| 连城县| 永仁县| 卢龙县| 福建省| 黑水县| 武平县| 邹城市|