精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python異常編程的小技巧集錦

開發 開發工具
在實際編程中,有時會發現Python提供的內建異常的不夠用,我們需要在特殊業務場景下的異常。這時就需要我們來定義自己的異常。按照Python約定俗成的習慣,用戶定義的異常一般都是繼承于Exception類,由它開始拓展。后面我們可以看到這樣做在捕獲異常的時候會帶來很大的便利。

 [[169559]]

編程中經常會需要使用到異常處理的情況,在閱讀了一些資料后,整理了關于異常處理的一些小技巧記錄如下。

如何自定義異常

定義異常類

在實際編程中,有時會發現Python提供的內建異常的不夠用,我們需要在特殊業務場景下的異常。這時就需要我們來定義自己的異常。按照Python約定俗成的習慣,用戶定義的異常一般都是繼承于Exception類,由它開始拓展。后面我們可以看到這樣做在捕獲異常的時候會帶來很大的便利。

 

  1. >>> class MyError(Exception): 
  2.         pass 
  3.  
  4. >>> raise MyError(u"something error"
  5. Traceback (most recent call last): 
  6.   File "<stdin>", line 1, in <module> 
  7. __main__.MyError: something error   

 

API異常相關的技巧

API的異常分為定義異常與調用API時如何捕獲異常兩個部分,這二者相輔相成。

定義API異常的技巧

在自己編寫API的時候,應該定義Root Exception——API中的根異常,其它異常都繼承于它。這樣的做法有兩個好處:

  • API代碼層次更清晰
  • API與調用程序代碼隔離

假設存在如下場景:需要做一個鏈接數據庫服務的模塊。提供一個connect函數用于鏈接。那么,在鏈接的過程中,就會發生以下幾種情況:

  • socket連接超時
  • socket拒絕連接

針對以上的情況,我們在模塊中定義幾個異常:

 

  1. database.py 
  2. class Error(Exception): 
  3.     """Root exception for all exceptions raised by this module.""" 
  4.      
  5. class SocketTimeError(Error): 
  6.     pass 
  7.  
  8. class SocketRefuseError(Error): 
  9.     pass 
  10.      
  11. def connect(): 
  12.     pass   

 

調用API時異常捕獲的技巧

這樣在調用API的時候就可以這樣使用:

 

  1. try: 
  2.     connect() 
  3. except SocketTimeError as err: 
  4.     log.error(err) 
  5. except SocketRefuseError as err: 
  6.     log.error(err) 
  7. except Error as err: 
  8.     log.error("API Unexpected error:%s" % err) 
  9. except Exception: 
  10.     log.error("API bug cause exception.")     

 

這樣精確定義多個異常,使得代碼層次清晰,增強了可讀性。值得注意的是:在代碼的***還捕獲了Error以及Exception兩個異常,這兩個操作分別對應于可拓展性與健壯性的目的。

捕獲Root Exception以提高可拓展性:

我們知道,在實際鏈接數據庫時,還可能會出現用戶沒有登陸權限等問題。所以,我們需要在下一個版本中加入PermissionDeny這個異常。但是,舊的調用代碼已經寫好了,如果忘記修改的話,這個異常可能就會無法被處理,進而使得調用的程序奔潰。處于這樣的考慮,我們在調用API的時候,就應該再捕獲API的Root Exception,即使之后新加入了其它的異常,在這一個except中也能被捕獲而不影響調用程序。使得API模塊的可拓展性得到了提高。

捕獲Exception以提高健壯性:

在調用API的時候,難免可能出現API內部存在bug的情況。這個時候如果捕獲了Exception的話,就算API內部因為bug發生了異常,也不會影響到調用程序的正常運行。

從這兩點中可以看出,要達到這種效果,其實都要依賴于常規異常繼承于Exception類這個規矩。這樣的架構劃分所帶來的好處是顯而易見的。

與異常相關的編程藝術

異常代替返回狀態碼

我們經常需要編寫一些工具類的函數,往往在這些函數的處理流程中,會產生很多的狀態;而這些狀態也是調用者需要得到的信息。很多時候,會用一些具有意義的返回值來表示函數處理的狀態。

比如:

 

  1. def write(content): 
  2.     if isinstance(content, basestring): 
  3.         f_handler = open("file.txt"'w'
  4.         try: 
  5.             f_handler.write(context) 
  6.             except Exception: 
  7.                 return -2    # write file fail 
  8.         else
  9.             return 0    # write file succcess 
  10.         finally: 
  11.             f_hanlder.close() 
  12.     else
  13.         return -1    # arg type error 

 

調用代碼:

 

  1. result = write() 
  2. if result == -1: 
  3.     log.error(u"type error"
  4. elif result = -2: 
  5.     log.error(u"write error"
  6. else
  7.     log.info("ok")     

 

這種狀態碼的方式使用起來特別的不方便,調用者還需要去理解每個狀態碼的意義,帶來其它的學習成本;而且用if-else結構也不易于后期的程序拓展。所以,我們可以使用觸發異常來代替返回狀態碼,每個異常名其實就包含了狀態的意義在內(命名的藝術),使用起來也更好理解。

使用異常的方式:

 

  1. class Error(Exception): 
  2.     pass 
  3.      
  4. class OpenFileError(Error): 
  5.     pass 
  6.      
  7. class WriteContentError(Error): 
  8.     pass     
  9.  
  10. def write(content): 
  11.     if isinstance(content, basestring): 
  12.         f_handler = open("file.txt"'w'
  13.         try: 
  14.             f_handler.write(context) 
  15.             except Exception: 
  16.                 raise WriteContentError 
  17.         finally: 
  18.             f_hanlder.close() 
  19.     else
  20.         raise OpenFileError 

 

調用代碼:

 

  1. try: 
  2.     write() 
  3. except OpenFileError as e: 
  4.     log.error(e) 
  5. except WriteContentError as e: 
  6.     log.error(e) 
  7. except Error: 
  8.     log.error("API Error"
  9. except Exception 
  10.     log.error("API Bug")     
  11. else
  12.     log.info("ok"

 

結合上面一點提到的使用API時的異常捕獲,使得調用代碼變得更佳靈活。

異常處理與流程控制

錯誤處理很重要,但如果它搞亂了代碼邏輯,就是錯誤的做法

將異常處理與正常流程控制混為一談時,代碼是十分丑陋的。我們應該將二者分離,***的做法就是將異常代碼塊抽離到另外的函數中。

 

  1. try: 
  2.     action_a() 
  3.     action_b() 
  4.     action_c() 
  5. except ActionException as e: 
  6.     log.error(e) 
  7. else
  8.     action_d()    

 

將異常處理分離:

 

  1. def action_executor(): 
  2.     action_a() 
  3.     action_b() 
  4.     action_c() 
  5.      
  6. def action(): 
  7.     try: 
  8.         action_executor() 
  9.     except ActionException as e: 
  10.         log.error(e) 
  11.          
  12. action() 
  13. action_d() 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2013-02-20 15:59:50

Windows 8

2023-10-26 18:03:14

索引Python技巧

2024-01-30 00:40:10

2021-12-27 14:33:47

Python語言開發

2024-06-04 07:46:05

2020-12-31 10:33:05

Python開發編程

2020-08-19 09:22:14

Python語言工具

2012-09-11 15:06:48

MooseFS

2013-06-08 16:55:22

Nagios

2023-09-24 13:55:42

Spring應用程序

2010-08-10 10:17:44

Flex內存

2010-09-26 09:08:17

JVM調優

2018-11-28 12:30:58

Python命令行編程語言

2010-09-07 10:20:21

CSS

2012-12-25 09:45:08

PythonWeb

2017-01-05 14:19:06

Grep命令查找

2020-09-23 09:20:58

代碼Java字符串

2024-05-28 14:45:00

2012-11-06 12:45:46

Windows 8

2014-12-11 13:40:15

Android Stu開發技巧
點贊
收藏

51CTO技術棧公眾號

精品黄色免费中文电影在线播放| 国产成人高清视频| 亚洲国产一二三区| 久久综合狠狠综合久久综青草| 99国产欧美另类久久久精品| 成人高清免费在线播放| 日本丰满少妇黄大片在线观看| 天天影视色香欲综合网老头| **在线精品| 亚洲丝袜在线观看| 色噜噜狠狠色综合网图区| 欧美在线不卡| 国产免费高清视频| 日韩激情视频| 亚洲一区二区三区视频在线播放| 六九午夜精品视频| 日韩在线免费观看av| 欧美成年人在线观看| 麻豆国产91在线播放| 特黄视频在线观看| 精品少妇人妻av一区二区| 91久久精品日日躁夜夜躁欧美| 欧美顶级毛片在线播放| 久久高清无码视频| 国产福利久久| 亚洲国产成人av网| 成人精品毛片| 丰满少妇乱子伦精品看片| 亚洲影影院av| 亚洲国产日韩精品| 成人另类视频| 日韩免费在线视频观看| 鲁片一区二区三区| 欧洲一区二区三区在线| 成人三级视频| 国产丰满美女做爰| 国产免费成人在线| 在线视频免费一区二区| 国产在线精品不卡| 99久久精品免费看国产小宝寻花| 亚洲精品鲁一鲁一区二区三区| 午夜精品视频网站| 国产精品美女久久久久aⅴ| 日韩三区四区| 天天操天天摸天天舔| 亚洲一区二区三区在线视频| 一区二区三区在线观看国产| 久久免费福利| 影音先锋国产资源| 大陆av在线播放| 亚洲天堂网在线观看| 大尺度一区二区| 日本综合字幕| 日本少妇在线观看| 特级毛片在线免费观看| 亚洲视频专区在线| caoporen国产精品视频| 在线观看欧美| 中文在线字幕免费观| 国产亚洲黄色片| 尤物精品国产第一福利三区| 成人黄页毛片网站| 亚洲网一区二区三区| 在线观看中文字幕码| 亚洲精品蜜桃久久久久久| 揄拍成人国产精品视频| 99久精品国产| 亚洲都市激情| 香蕉视频成人在线| 国产chinese中国hdxxxx| 国产精品视频一区国模私拍| 在线免费观看日本欧美| 裸体一区二区三区| 日韩毛片一区| 婷婷激情五月综合| 九热视频在线观看| 国产精品亚洲网站| 欧美日韩国产一区二区三区地区| 亚洲欧美日韩视频二区| 草草视频在线| 啪啪小视频网站| 日韩欧美在线免费观看视频| 欧美最顶级的aⅴ艳星| 亚洲午夜久久久久久久久电影网| 中文无码久久精品| 成人在线直播| 免费观看一级视频| 日韩中文字幕免费在线| 日韩免费观看视频| 日韩一区二区电影| 95精品视频在线| 国产精选一区| www.在线视频| 美女又爽又黄免费视频| 国产精品999.| 九九久久99| 操91在线视频| 色偷偷88欧美精品久久久| 韩国欧美国产一区| 嫩草影视亚洲| 午夜av在线播放| 91porny九色| 免费在线观看日韩av| 日韩中文一区| 欧美成人午夜免费视在线看片 | 最新国产拍偷乱拍精品| 四虎影视成人精品国库在线观看| 免费观看黄色av| 成人免费视频网站入口::| 国产a级一级片| 99久久精品久久久久久ai换脸| 亚洲视频在线免费观看| 欧美丝袜一区二区| 国产精品一区二区无线| 99成人超碰| 成人视屏在线观看| 亚洲欧美日韩精品永久在线| 国产在线免费看| 无码aⅴ精品一区二区三区浪潮| 91精品久久久久久久久久| 亚洲人成绝费网站色www| 午夜精品福利久久久| 国产91对白在线观看九色| 亚洲乱码精品| 四虎成人在线| 亚洲男女视频在线观看| 日本爱爱小视频| 茄子视频成人免费观看| 久99久在线| 欧美—级高清免费播放| 日韩欧美一卡二卡| 亚洲欧洲国产专区| 韩国欧美国产一区| 中文字幕免费一区二区三区| 国产精品欧美一区二区三区不卡| 国产乱理伦片a级在线观看| av手机天堂网| 中文字幕一二三四区| 国产精品沙发午睡系列| www.成人av.com| 久久全国免费视频| 亚洲精品在线免费观看视频| 婷婷激情综合网| 26uuu成人网一区二区三区| 国产欧美一区二区色老头 | 亚洲婷婷影院| 韩国美女久久| 免费在线你懂的| 亚洲精品视频91| 九九热在线免费观看| 一区二区精品免费| 视频区 图片区 小说区| 欧美一区二区视频17c| 国产精品成人免费电影| 欧美精品做受xxx性少妇| 日韩不卡中文字幕| 欧美嫩在线观看| 午夜欧美在线一二页| 国产精品五月天| av电影一区二区| 极品少妇一区二区三区精品视频| 亚洲综合中文| 中文字幕av一区二区三区人| 欧美黑粗硬大| 高清av一区二区三区| 亚洲欧美小说色综合小说一区| 日本黄色不卡视频| 综合网在线观看| 黄色激情视频在线观看| 永久看片925tv| 日韩福利在线视频| 国产aⅴ激情无码久久久无码| 在线能看的av网站| 中文字幕 91| 亚洲色图38p| 91九色在线观看视频| a级黄色一级片| jizzjizzxxxx| 亚洲狼人综合干| 五月天婷婷亚洲| 手机精品视频在线| 虎白女粉嫩尤物福利视频| 成年人网站大全| 2025韩国理伦片在线观看| 手机在线成人免费视频| 中文字幕线观看| 免费不卡av网站| 黄色av电影网站| 亚洲一级中文字幕| 亚洲欧美日韩第一页| 永久免费看mv网站入口| 国产精品suv一区| 亚洲欧美日韩一区二区三区四区| 欧美人妻精品一区二区免费看| 成年人视频软件| 日韩av网站在线播放| 69xx绿帽三人行| 国产区一区二区三| 亚洲自拍偷拍另类| 91亚洲精品国偷拍自产在线观看 | 666av成人影院在线观看| 大胆人体一区| 视频一区视频二区欧美| 国产麻豆一区二区三区精品视频| 欧美日韩老妇| 欧美日韩专区| 另类欧美日韩国产在线| 99精品视频一区二区三区| 久久久精品2019中文字幕之3| 亚洲欧美日韩国产一区二区三区| 在线观看免费视频综合| 亚洲欧美另类中文字幕| 亚洲欧美中文日韩在线v日本| 久久视频免费观看| 国产精品一区二区三| 少妇免费毛片久久久久久久久| 91免费黄视频| 中文字幕天天干| 成人国产一区二区三区| 好吊操视频这里只有精品| 999福利视频| 男人天堂综合网| 6699嫩草久久久精品影院| 国产一区二区三区亚洲综合| 91麻豆国产自产在线观看亚洲 | 黑人巨大精品| 午夜日韩影院| 亚洲精品孕妇| 国产99久久久国产精品潘金网站| 亚洲精品写真福利| 日韩精品一区二区三区四区视频 | 乱插在线www| 国产精品美女午夜爽爽| 色狮一区二区三区四区视频| 久久er99热精品一区二区| 亚洲三级小视频| 精品国产一区久久| 另类天堂视频在线观看| 国产精品区免费视频| www黄色av| 亚洲av成人无码久久精品 | 久久久人成影片一区二区三区在哪下载 | 欧美啪啪网站| 日韩在线观看| 国产成人精品综合在线观看| 日韩欧美999| 国产一区二区日韩精品欧美精品| 国产成人精品在线视频| 91xxx视频| 久久久久久久久久久久久久久| 91av在线免费视频| 成人性生交大片免费看午夜 | 国产精品视频yy9099| 欧美精品一区二区性色a+v| 女人扒开腿免费视频app| 国产精品21p| 超碰在线最新| 久久精品影视| 91一区二区在线| 在线观看亚洲a| 91精品成人久久| 潘金莲一级淫片aaaaa免费看| 免费观看av网站| 天堂在线视频观看| 高清一区二区中文字幕| 青青草国产成人99久久| 高潮白浆女日韩av免费看| 欧美激情综合色| 欧美精品久久久久久久久久久| 亚洲女人久久久| 欧美激情办公室videoshd| 欧美电影一区| 亚洲图片你懂的| 久久精品男人天堂| 一区二区在线中文字幕电影视频| 美女爆乳18禁www久久久久久 | 成人日韩在线视频| 国产专区第一页| 日本在线精品| 轻轻草成人在线| 日韩欧美在线视频| 97在线日本国产| 人妻无码久久一区二区三区免费| 亚洲色图综合区| 波多野结衣中文在线| 亚洲每日更新| 亚洲午夜精品在线| 97超碰国产精品女人人人爽| 欧美在线一区视频| 国产午夜久久久| 亚洲色图官网| 精品一二三四区| 日韩av网站电影| 日本成人黄色| 久久久久久久久久久网| 女生影院久久| 久久电影网电视剧免费观看| 精品国产欧美一区二区| 亚洲国产精品综合| 亚洲二区在线播放| av电影一区| aa级大片欧美| 久久综合色影院| 久久久久久久久影视| 中文字幕一区二区三区波野结| 日韩精品视频中文字幕| 久久久777精品电影网影网| 欧美疯狂xxxx大交乱88av| 免费在线观看的av网站| 蜜臀av在线观看| 夜间精品视频| 欧美日韩一区不卡| 欧美日韩另类丝袜其他| 91嫩草|国产丨精品入口| 在线不卡日本v二区707| 国产传媒在线观看| 一区二区三区午夜视频| 色综合久久久久| 免费看国产精品一二区视频| 久久久精品99| 视频精品国内| 一区二区视频在线| 国产精品日日做人人爱| av男人的天堂av| 亚洲欧美久久精品| 亚洲欧美在线观看| 91精品久久久久久久久久另类| 特级西西人体4444xxxx| 美女av在线播放| 国产酒店精品激情| 色综合天天综合网国产成人网 | 日本欧美韩国国产| 亚洲午夜一二三区视频| 精品一区二区三区国产| 噼里啪啦国语在线观看免费版高清版| 天天干免费视频| 男人的j进女人的j一区| 亚洲欧美一区二区三区情侣bbw| 国产激情片在线观看| 国产 欧美 精品| 1024成人| 日韩中文av在线| 国产精品一区二区在线免费观看| caopeng在线| 国产aⅴ综合色| 日本国产高清不卡| 亚洲色图欧美色| jizzjizzjizz欧美| 色综合中文综合网| 日日噜噜夜夜狠狠久久丁香五月| 在线免费观看视频网站| 日韩亚洲国产精品| 在线视频欧美日韩| www.美色吧.com| 精品国产欧美日韩一区二区三区| 国产精品久久毛片av大全日韩| 日产精品久久久一区二区| 国产女主播福利| 麻豆成人av在线| 57pao成人国产永久免费| 国产 中文 字幕 日韩 在线| 国产日韩一区二区三免费高清| 欧美午夜片在线免费观看| 久久综合狠狠综合久久综青草 | 日韩精品一区在线| 乌克兰美女av| 在线视频播放大全| 欧洲国产伦久久久久久久| 黄色电影免费在线看| 国产精品福利小视频| 国产精品x8x8一区二区| 成人免费观看毛片| 国产丝袜欧美中文另类| 国产精品视频在线观看免费| 毛片精品免费在线观看| 精品视频在线观看免费观看| 成人免费在线网| 2022国产精品视频| 一级片在线免费观看视频| 久久久久999| 久久天堂久久| 久久久999视频| 国产欧美日韩视频在线观看| 一级黄色片网站| 韩日欧美一区二区| 九九久久婷婷| 亚洲天堂2018av| 亚洲精品一二三| 五月天婷婷在线播放| 国产色综合天天综合网| 在线免费高清一区二区三区| 特级西西人体wwwww| 欧美丰满高潮xxxx喷水动漫| 黄网av在线| 精品免费二区三区三区高中清不卡| 六月婷婷色综合| 久久老司机精品视频| 中文字幕在线观看日韩| 超碰在线亚洲| 啊啊啊国产视频|