精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

五月婷婷丁香网| 欧美性受xxxx黑人| 国产白浆在线免费观看| 99麻豆久久久国产精品免费| 国产ts人妖一区二区三区| 成人黄色免费网址| 亚洲va欧美va人人爽成人影院| 亚洲一区精品在线| 日本精品一区二区| 精品国产伦一区二区三| 久久精品91| 欧美大尺度在线观看| 国产精品三级在线观看无码| 亚洲伊人伊成久久人综合网| 黄色成人在线播放| 中文字幕一区综合| 四虎精品在线| 国产乱码精品一区二区三区忘忧草 | av超碰免费在线| 久久久综合视频| 99国产在线观看| 中文字幕天堂在线| 亚洲全部视频| 久久精品免费播放| 一道本在线观看| 精品福利一区| 4hu四虎永久在线影院成人| 国产亚洲综合视频| 污视频在线看网站| 国产精品精品国产色婷婷| 久久精品五月婷婷| 免费av网站观看| 国产一区福利在线| 国产精品尤物福利片在线观看| 三级黄色在线视频| 国产精品v欧美精品v日本精品动漫| 亚洲片av在线| aaaaaav| 久久中文资源| 亚洲成人av资源网| 在线观看免费看片| 国产一区一区| 91精品综合久久久久久| 天天干天天操天天玩| 精品欧美一区二区三区在线观看| 午夜精品aaa| 黄色大片中文字幕| 第四色日韩影片| 亚洲综合免费观看高清完整版在线| 一区二区在线观看网站| 1769视频在线播放免费观看| 久久精品夜色噜噜亚洲aⅴ| 精品在线不卡| 日韩av资源站| 久久久国产精品不卡| 欧美一区二区三区四区在线观看地址| 四虎影视在线播放| 久久久久免费观看| 日韩精品最新在线观看| 草碰在线视频| 国产精品国产自产拍高清av| 亚洲视频sss| 最新超碰在线| 亚洲午夜精品久久久久久久久| 日韩精品一区二区三区四| 暖暖在线中文免费日本| 亚洲成年人网站在线观看| 日本在线xxx| 久久电影tv| 欧美性生活一区| 在线看免费毛片| 香蕉免费一区二区三区在线观看| 精品国产一区a| 三级男人添奶爽爽爽视频| 蜜乳av综合| 综合网中文字幕| 538精品在线视频| 在线欧美一区| 国产精品国产三级国产aⅴ9色| 中国女人真人一级毛片| 国模少妇一区二区三区| 国产精品国产精品国产专区蜜臀ah| 日韩在线观看视频网站| 久久婷婷成人综合色| 亚洲精品久久区二区三区蜜桃臀| 黄色网址在线免费| 婷婷激情综合网| 黄色永久免费网站| 7777精品| 伊人青青综合网站| 免费在线观看av网址| 男女av一区三区二区色多| 国产精品国产亚洲伊人久久| 99热这里只有精品99| 99久久精品免费看| 亚洲欧洲国产精品久久| 2019中文字幕在线电影免费 | 大陆精大陆国产国语精品| 日韩精品在线影院| 三级全黄做爰视频| 午夜一区在线| 91最新国产视频| 欧美日韩在线精品一区二区三区激情综 | 国产伦精品一区二区三区| 国产天堂在线| 亚洲国产欧美另类丝袜| 一级片视频免费观看| 欧美调教在线| 久久国产色av| 中文字幕在线视频免费| 波多野洁衣一区| 伊人久久大香线蕉综合75| 欧美男男tv网站在线播放| 欧美一区二区不卡视频| 国产一区二区三区四区五区六区 | 国产精品视频一区二区三区不卡| 国产精品自拍合集| 香蕉成人在线| 亚洲精品自产拍| 日本视频www| 国产一区二区在线免费观看| 日本在线成人一区二区| 国模私拍一区二区国模曼安| 91精品啪在线观看国产60岁| 无码一区二区三区在线| 夜夜夜久久久| 成人黄色在线免费观看| 精精国产xxxx视频在线| 在线精品视频一区二区三四| 人妻在线日韩免费视频| 亚洲性图久久| 成人黄视频免费| 少女频道在线观看免费播放电视剧| 欧美视频一二三区| 制服 丝袜 综合 日韩 欧美| 国产精品尤物| 久久精品成人一区二区三区蜜臀| 性欧美ⅴideo另类hd| 欧洲人成人精品| 久久精品—区二区三区舞蹈| 国产精品日韩精品欧美精品| 精品不卡在线| gogo久久| 日韩大陆欧美高清视频区| 国产精品二区一区二区aⅴ| 国产**成人网毛片九色 | 99精品欧美一区二区| 久久高清国产| 日韩欧美一区二区三区四区五区 | 黄在线免费观看| 欧美日韩mp4| 天堂网中文在线观看| 老司机午夜精品| 亚洲国产精品影视| 国产成人免费av一区二区午夜| 色婷婷**av毛片一区| 一级黄色录像大片| 亚洲欧美激情插| 国产又粗又猛又爽又黄| 极品av少妇一区二区| 狠狠色噜噜狠狠色综合久| 韩国成人二区| 亚洲三级 欧美三级| 中文字幕91爱爱| 最新中文字幕一区二区三区| 日韩精品在线播放视频| 尹人成人综合网| 久久久久久久久久久久久久久久av| 日韩精品av| 一本色道久久88综合亚洲精品ⅰ | 欧美超碰在线观看| 欧美国产日本视频| 亚洲18在线看污www麻豆| 欧美在线精品一区| 精品国产乱码久久久久久郑州公司| 无遮挡爽大片在线观看视频| 国产亚洲成精品久久| 91中文字幕在线视频| 亚洲一区二区偷拍精品| 三级男人添奶爽爽爽视频| 免费在线观看精品| 九九久久九九久久| 亚洲午夜久久| 91色精品视频在线| 亚洲天堂资源| 伦伦影院午夜日韩欧美限制| 天天射,天天干| 欧美日韩日日摸| 日本在线观看中文字幕| 国产女人18水真多18精品一级做| 91在线第一页| 米奇777在线欧美播放| 宅男一区二区三区| 全国精品免费看| 91久久在线观看| 在线观看网站免费入口在线观看国内| 色小说视频一区| 性高潮久久久久久久久久| 欧美色中文字幕| 日本在线小视频| ㊣最新国产の精品bt伙计久久| 亚洲第一黄色网址| 国内精品免费**视频| 东京热加勒比无码少妇| 欧美日韩国产精品一区二区亚洲| 日本电影一区二区三区| www国产精品| 成人国产精品一区二区| 成人性生活视频| 久久久久久久久久婷婷| 秋霞a级毛片在线看| 国产视频亚洲视频| 亚洲精品一区二区三区不卡| 欧美美女黄视频| 天天干天天操天天操| 亚洲成人动漫一区| 黄色一级片中国| 国产精品不卡在线| 在线国产视频一区| 久久综合九色综合97婷婷| 妖精视频在线观看| 国产一区二区三区久久久| 国产真人无码作爱视频免费| 影音先锋在线一区| 妞干网这里只有精品| 久久中文字幕av| 日韩精品大片| 精品一区欧美| 欧美大香线蕉线伊人久久| 波多野结衣欧美| 97久久夜色精品国产九色| 福利一区二区免费视频| 国产97色在线|日韩| 国产精品论坛| 97久久国产精品| 久草在线视频福利| 久久久久久久激情视频| 三级福利片在线观看| 欧美精品一区二区三区国产精品| 日本中文字幕在线视频| 最近2019免费中文字幕视频三 | 一区二区三区四区蜜桃| 永久免费看片直接| 1024亚洲合集| 久久人妻无码aⅴ毛片a片app | 国产成人综合视频| 欧美一级特黄aaa| 国产一区二区日韩精品| 99久久99精品| 国产91高潮流白浆在线麻豆| 人妻换人妻a片爽麻豆| 成人免费精品视频| 五月天激情小说| 久久蜜桃一区二区| 久久国产柳州莫菁门| 欧美国产一区视频在线观看| 内射毛片内射国产夫妻| 中文字幕一区二区三中文字幕| 亚洲色图27p| 亚洲一区二区三区在线| 亚洲国产精品成人无久久精品| 偷窥国产亚洲免费视频| 国产午夜性春猛交ⅹxxx| 色呦呦网站一区| 在线观看国产一区二区三区| 51午夜精品国产| 亚洲国产精品久久人人爱潘金莲| 亚洲精品一线二线三线无人区| 天天干天天爽天天操| 亚洲视屏在线播放| 日本在线免费网| 欧美激情视频播放| 亚洲性色av| 国产在线高清精品| 都市激情久久| 日本一区二区三区www| 小处雏高清一区二区三区| www.av蜜桃| 日韩avvvv在线播放| 人妻巨大乳一二三区| 91在线精品一区二区三区| 美国黑人一级大黄| 亚洲激情第一区| 青青视频在线免费观看| 91精品久久久久久蜜臀| 日本精品999| 亚洲一二在线观看| 欧美巨大xxxx做受沙滩| 日本欧美黄网站| 久久久久久久久久久久电影| 另类视频在线观看+1080p| 99精品在线| 大j8黑人w巨大888a片| 麻豆精品一区二区三区| 免费a v网站| 国产精品视频在线看| 亚洲天堂日韩av| 69av一区二区三区| 日韩国产福利| 欧美极品美女视频网站在线观看免费 | 天天射天天操天天干| 日韩中文字在线| 深夜福利视频一区二区| 91亚洲精品视频| 国产精品探花在线观看| 久久亚洲a v| 精品一区二区三区免费| 好吊日免费视频| 一区二区三区产品免费精品久久75| 精品久久久久久久久久久久久久久久| 日韩欧美电影一二三| av午夜在线| 91超碰中文字幕久久精品| 久久免费精品| 影音先锋欧美资源| 久久精品九九| 国产ts丝袜人妖系列视频| 亚洲精品一二三| 中文在线免费看视频| 亚洲精品在线视频| 182在线视频观看| 91久久偷偷做嫩草影院| 日韩精品二区| 久久精品免费网站| 久久综合九色综合欧美就去吻| 国产精品成人国产乱| 欧美一区二区在线播放| 香蕉视频网站在线观看| 日本精品久久久久影院| 精品丝袜久久| 精品久久久久久无码中文野结衣| 韩国欧美国产1区| 999久久久国产| 欧美日韩性生活| 91社区在线| 国产欧美精品久久久| 成人三级视频| 免费看污污网站| 亚洲国产精品精华液2区45| 欧美一级淫片免费视频黄| 精品亚洲国产成av人片传媒| 性国裸体高清亚洲| 国产日韩一区二区三区| 亚洲裸体俱乐部裸体舞表演av| 91九色蝌蚪porny| 午夜精品久久久久久久久| 内射无码专区久久亚洲| 久久久欧美一区二区| 黑人久久a级毛片免费观看| 成年人午夜免费视频| aaa亚洲精品一二三区| 亚洲黄色小说图片| 亚洲奶大毛多的老太婆| 国产精品极品美女在线观看| 日韩精品一区二区三区丰满 | 99久久久无码国产精品性波多 | 国产又粗又猛又黄| 精品久久久91| 日韩精品一区国产| av女优在线播放| 91丝袜高跟美女视频| 亚洲乱码国产乱码精品| 中文字幕欧美日韩va免费视频| 六九午夜精品视频| 中文字幕色呦呦| 成年人网站91| 欧美日韩a v| 另类图片亚洲另类| 精品成人自拍视频| 欧美日韩亚洲一二三| 中文字幕欧美一| 国产91麻豆视频| 日韩av男人的天堂| 欧美电影免费| 精品无码av一区二区三区| 日韩欧美第一页| www视频在线免费观看| 精品高清视频| 国模娜娜一区二区三区| 日韩精品无码一区二区| 中文字幕精品一区二区精品| 免费观看亚洲天堂| 久久久久久久久久久视频| 国产精品人妖ts系列视频| 性猛交xxxx乱大交孕妇印度| 欧美综合在线观看| 国产高清一区二区| 91丨porny丨对白| 欧美午夜不卡视频| 福利成人导航| 亚洲视频小说| 99久精品国产| 国产一区二区女内射| 97视频在线观看免费| 99精品在线| 蜜桃av乱码一区二区三区| 欧美成人高清电影在线| 日本在线视频一区二区| 蜜臀av无码一区二区三区| 中文字幕一区二区三区四区不卡|