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

Python里三個高逼格的調試神器

開發 后端
調試是開發過程中不可避免的一個環節,在Python中我們使用print、logging、assert等方法進行調試既簡單又實用,但畢竟有其局限性。

 調試是開發過程中不可避免的一個環節,在Python中我們使用print、logging、assert等方法進行調試既簡單又實用,但畢竟有其局限性。今天這篇文章為大家帶來三個工具,其中有Python的內置模塊也有第三方庫,它們提供了調試代碼所需的大部分常用功能,將極大的提升我們的開發和bug排除效率。

[[278608]]

1.PDB

pdb是Python中的一個內置模塊,啟用pdb后可以對代碼進行斷點設置和跟蹤調試。為了演示方便,我們準備一個樣例程序pdb_test.py:

  1. def countnumber(number): 
  2.  for i in range(number): 
  3.  print(i) 
  4. if __name__ == '__main__'
  5.  countnumber(10) 

之后在終端中輸入python -m pdb pdb_test.py命令,進入pdb的調試模式:

這時我們就可以通過各種命令控制代碼執行或者查看當前變量,例如l可以查看所有代碼,n是執行下一步代碼,p可以查看當前變量等等,需要注意的是命令n只會執行主程序中的代碼,如果想要單步執行子函數中的代碼,需要使用s指令,調試效果如下:

可以看到,通過s指令(如果只想在主函數中單步執行可以使用n)和p指令,我們控制程序單步運行并實時查看了相關變量。但是單步執行畢竟是一種效率非常低下的調試方式,尤其當代碼量比較大的時候更是噩夢,這時就需要用到pdb的set_trace()方法,我們對樣例程序pdb_test.py做一點修改:

  1. import pdb 
  2. def countnumber(number): 
  3.  for i in range(number): 
  4.  print(i) 
  5.  pdb.set_trace() 
  6. if __name__ == '__main__'
  7.  countnumber(10) 

pdb.set_trace()的作用就是在代碼中設置斷點,在pdb調試模式下,使用c命令就會直接跳轉到下一個斷點位置,如果之后沒有其他斷點就會執行完全部代碼,調試效果如下:

除了上面提到的幾個指令以外,pdb還有其他一些比較常用的命令(見下表),綜合使用基本能夠滿足日常的調試需求。

2.Better-exceptions

better-exceptions是一個Python第三方庫,作者對他的定義是“使異常信息更加美觀和詳盡”。在正式使用之前先說下這個庫的安裝:

  • 第一步,使用pip install better_exceptions安裝better-exceptions庫;
  • 第二步,使用export BETTER_EXCEPTIONS=1(Linux / OSX)或setx BETTER_EXCEPTIONS 1(Windows)設置環境變量。

現在就可以正常使用better-exceptions進行調試了,為了演示效果更加明顯,我們對上文中的代碼稍作修改作為本次的樣例程序better_test.py:

  1. def divisionnumber(number, div): 
  2.  for i in range(div): 
  3.  print(number / i) 
  4. if __name__ == '__main__'
  5.  divisionnumber(10, 10) 

很明顯,上面這段代碼在執行過程中會因為分母為0而拋出異常,現在我們執行python better_test.py,看看啟用了better-exceptions后的異常信息是什么樣子的:

從上面這幅圖可以看出better-exceptions對異常信息的修改主要體現在兩個方面:

  • 一是對產生異常的代碼進行了顏色標注;
  • 二是對產生異常的代碼中的相關變量值進行了輸出(包括函數等對象);

這樣一來,很多時候我們只需要根據better-exceptions輸出的輔助信息就能判斷產生異常的位置和原因,而不必像以前一樣再次查看源代碼并觀察運行結果,正如作者所說:Pretty and more helpful。

但是,過多的信息輸出也會有問題,那就是當代碼層級結構比較復雜的時候,better-exceptions輸出的輔助信息可能會非常之多,就比如上面的divisionnumber函數,他所在的地址信息多數時候我們并不關心,為了屏蔽這些“垃圾”信息,我們可以在代碼中加一行:

  1. better_exceptions.MAX_LENGTH = XXX 

XXX是允許顯示的最大字符長度,比如這里設置為10,再來運行better_test.py這個程序就會是下面的結果:

可以看到,對函數divisionnumber的注釋只顯示了最開始的"

除了上面提到的功能之外,better-exceptions還可以和logging還有django無縫接入,這使得它的應用更加靈活,關于這方面內容大家可以查看項目文檔。

還有一點需要提醒大家,如果你是在windows下使用,可能會出現下圖中的亂碼問題,這是由于better-exceptions的內設編碼格式所導致的。

解決的辦法是在安裝后,對better_exceptions目錄下的encoding.py文件第10行代碼進行如下修改:

  1. # 原代碼: 
  2. ENCODING = locale.getpreferredencoding() 
  3. # 修改為: 
  4. ENCODING = 'utf-8' 

3.PySnooper

PySnooper也是一個Python的第三方庫,他的特點是能夠精準的顯示每條代碼的執行順序、執行時間以及隨之帶來的局部變量的改變等等。值得一提的是,作為一個發布不滿半年的庫,PySnooper在github上已經達到了1.2W星,其受歡迎程度可見一斑。

PySnooper的使用可以說是非常的方便,直接在代碼中以裝飾器的形式調用就可以了。當然在引用前你得使用pip install pysnooper或者conda install -c conda-forge pysnooper安裝這個庫。我們還是舉一個例子來進行演示,樣例代碼如下:

  1. import pysnooper 
  2. import random 
  3. @pysnooper.snoop() 
  4. def foo(): 
  5.  lst = [] 
  6.  for i in range(10): 
  7.  lst.append(random.randrange(1, 1000)) 
  8.  lower = min(lst) 
  9.  upper = max(lst) 
  10.  mid = (lower + upper) / 2 
  11.  print(lower, mid, upper
  12. foo() 

在上面這段代碼中,我們先是生成10個1到1000之間的隨機數,然后計算他們之中的最大最小值和中位數,唯一的不同在于第三行多了一條語句@pysnooper.snoop(),我們運行以下代碼,發現除了正常的print結果之外,多了許多內容(內容太多,下面只顯示一部分):

  1. 19:51:57.704857 call 16 def foo(): 
  2. 19:51:57.705860 line 17 lst = [] 
  3. New var:....... lst = [] 
  4. 19:51:57.705860 line 18 for i in range(10): 
  5. New var:....... i = 0 
  6. 19:51:57.705860 line 19 lst.append(random.randrange(1, 1000)) 
  7. Modified var:.. lst = [758] 
  8. 19:51:57.705860 line 18 for i in range(10): 
  9. Modified var:.. i = 1 
  10. .................... 
  11. 19:51:57.706818 line 22 upper = max(lst) 
  12. New var:....... upper = 927 
  13. 19:51:57.706818 line 23 mid = (lower + upper) / 2 
  14. New var:....... mid = 552.0 
  15. 19:51:57.706818 line 24 print(lower, mid, upper
  16. 19:51:57.706818 return 24 print(lower, mid, upper
  17. Return value:.. None 

這都是PySnooper跟蹤監控的結果,正如上面所說,他準確記錄的每條代碼的運行時間、順序以及相關的變量值。

作為一個星標1.2W+的項目,PySnooper的功能肯定不會這么簡單,@pysnooper.snoop()中是可以接收參數的,比如我們覺得輸出內容太多,可以考慮把信息記錄到log日志中,這個功能只需要加一個log文件定位參數就能搞定:

  1. @pysnooper.snoop('file.log'

@pysnooper.snoop()支持的參數還有很多,分別對應了不同的功能,例如監控自定義表達式、監控底層函數、支持多線程等等,詳見項目文檔。

此外,pysnooper還支持局部監控,一般來說我們寫的代碼都比較長,而需要監控的只是其中的一小部分,這時候就可以把需要監控的代碼放到一個block里。我們修改下剛才的代碼,只對計算最大最小值和中位數的部分進行監控,修改后的代碼如下:

  1. import pysnooper 
  2. import random 
  3. def foo(): 
  4.  lst = [] 
  5.  for i in range(10): 
  6.  lst.append(random.randrange(1, 1000)) 
  7.  with pysnooper.snoop(): 
  8.  lower = min(lst) 
  9.  upper = max(lst) 
  10.  mid = (lower + upper) / 2 
  11.  print(lower, mid, upper
  12. foo() 

運行之后發現監控信息精簡了很多:

  1. New var:....... lst = [562, 341, 552, 353, 628, 302, 430, 188, 955, 108] 
  2. New var:....... i = 9 
  3. 20:02:47.359272 line 21 lower = min(lst) 
  4. New var:....... lower = 108 
  5. 20:02:47.359272 line 22 upper = max(lst) 
  6. New var:....... upper = 955 
  7. 20:02:47.360269 line 23 mid = (lower + upper) / 2 

使用with pysnooper.snoop()模式依然保留了對各種參數的支持,個人認為這種模式更加符合實踐需求。

小結:

今天介紹了三個不借助IDE就能方便使用的調試工具,三個工具的調試思路和適用場景也各不相同,大家可以根據需要靈活選用。不過話說回來,我個人最喜歡的還是PySnooper,你最喜歡哪一款呢?

責任編輯:華軒 來源: 菜鳥學Python
相關推薦

2024-03-11 00:05:00

2025-02-14 00:25:00

SQL寫法業務

2020-06-08 15:18:50

Python圖片PIL

2016-11-17 12:49:36

云運維銀行卡建設

2015-01-15 10:57:35

App春節

2015-07-27 17:21:51

Google SRE運維

2010-03-26 15:41:39

Python腳本

2015-04-01 10:07:06

云計算概念公有云私有云

2021-10-13 06:59:03

Python技巧編程

2023-04-26 11:14:11

IT領導者遠程工作

2022-06-30 09:01:00

嵌入式軟件技巧

2020-09-29 14:13:29

寫一個高逼格可視化“圓

2020-06-11 09:00:27

SDN網絡架構網絡

2021-12-09 14:54:58

大數據人工智能AI

2013-08-21 11:11:35

大數據

2010-03-15 16:34:50

Python字典

2011-09-09 14:52:55

2010-09-02 16:46:52

SOAP協議

2018-02-25 07:23:23

2022-02-21 14:14:03

SSH加密密鑰
點贊
收藏

51CTO技術棧公眾號

亚洲欧洲综合另类在线| 蜜桃精品在线观看| 亚洲国产成人久久综合一区| 亚洲精品蜜桃久久久久久| 3d精品h动漫啪啪一区二区| 2019男人天堂| 视频在线一区| 日韩不卡免费高清视频| 不卡电影一区二区三区| 国产精品久久久久91| 天天天天天天天天操| 精品亚洲精品| 欧美精品久久一区二区三区| 99爱视频在线| 黄av在线免费观看| 久久看人人爽人人| www久久99| 中文字幕一区二区三区人妻四季| 欧美日韩免费观看一区=区三区| 亚洲欧美国内爽妇网| 亚洲女人在线观看| 日韩欧美一区二区三区在线观看| 亚洲午夜视频在线观看| 亚洲欧洲日夜超级视频| 十八禁一区二区三区| 精品一区精品二区高清| 国产91色在线| 五月婷婷激情网| 亚洲成人三区| 在线观看成人黄色| 欧美熟妇一区二区| 国产精品传媒| 精品日韩在线一区| 午夜国产福利在线观看| 日韩天堂在线| 色狠狠一区二区| 欧美一区二区激情| 日本最新在线视频| 国产精品系列在线| 欧洲av一区| 天天综合在线视频| 播五月开心婷婷综合| 成人精品水蜜桃| 精品国产999久久久免费| 精品中文字幕一区二区小辣椒| 5566成人精品视频免费| 在线观看亚洲天堂| 国产午夜久久| 日本国产欧美一区二区三区| 国产精品theporn动漫| 欧美日本中文| 久久久天堂国产精品女人| 久久久久久久久久97| 日韩在线视频精品| 色999日韩欧美国产| 亚洲一级片在线播放| 国产综合久久久| 国产一区二区黄| 免费黄色在线网址| 国产韩日影视精品| 精品国产一区二区三区四区在线观看 | 黄色一级免费大片| 中国a一片一级一片| 丝袜诱惑制服诱惑色一区在线观看| 亚洲精品午夜久久久| 亚洲精品国产精品久久| 成人网视频在线观看| 国产精品视频免费看| 亚洲一区二区四区| 黄色免费在线看| 亚洲黄色性网站| 亚洲乱码日产精品bd在线观看| 手机在线免费观看av| 亚洲一区二区在线播放相泽| 免费视频爱爱太爽了| av福利在线导航| 欧美性猛交xxxx富婆| 欧美性猛交久久久乱大交小说| 手机电影在线观看| avtt综合网| 欧美成人a∨高清免费观看| 激情综合网婷婷| 好吊日免费视频| 少妇的滋味中文字幕bd| 日韩av不卡一区| 亚洲欧美制服另类日韩| 欧美自拍偷拍网| 亚洲自拍偷拍网| 91国内产香蕉| 伊人亚洲综合网| 国产成人一级电影| 久久亚洲高清| 成人看片免费| 91国偷自产一区二区三区观看| 色婷婷一区二区三区av免费看| 亚洲一区二区三区免费| 亚洲精品在线不卡| 暗呦丨小u女国产精品| 黄色成人av网站| 国产成人+综合亚洲+天堂| 99久久精品国产一区色| 99re66热这里只有精品3直播| 日韩视频在线播放| 午夜成年人在线免费视频| 欧美丝袜一区二区三区| 97人人爽人人| 亚洲福利网站| 欧美国产乱视频| 亚洲婷婷久久综合| 成人国产一区二区三区精品| 亚洲精品在线免费看| а√天堂8资源在线| 69堂成人精品免费视频| 91网站免费视频| 亚洲经典在线看| 亚洲xxxx18| 国产免费a∨片在线观看不卡| 亚洲国产精品久久艾草纯爱| 男人午夜视频在线观看| 国产不卡一二三区| 国模精品视频一区二区| 99精品人妻无码专区在线视频区| 欧美韩国日本一区| 妞干网在线免费视频| 免费看久久久| 欧美激情按摩在线| 国产精品怡红院| 欧美在线播放| 国产91网红主播在线观看| 亚洲精品.www| 亚洲人吸女人奶水| 污污网站免费看| 自拍亚洲一区| 欧美一级电影在线| 香蕉视频911| 亚洲3atv精品一区二区三区| 午夜影院免费版| 91精品国产乱码久久久久久 | 中文字幕免费视频| 1024成人| 成人在线免费观看一区| 怡红院av在线| 在线播放欧美女士性生活| 夜夜春很很躁夜夜躁| 日韩精品久久久久久| 欧美裸体网站| 日韩欧美精品电影| 一色桃子一区二区| 中国女人一级一次看片| 国产精品麻豆99久久久久久| 中文字幕第80页| 成人在线免费观看91| 国产欧美精品久久久| www.亚洲.com| 欧美浪妇xxxx高跟鞋交| chinese全程对白| 国产成人精品免费在线| 三上悠亚久久精品| 希岛爱理av免费一区二区| 欧美在线影院在线视频| 你懂的好爽在线观看| 91成人在线精品| 嘿嘿视频在线观看| 狠狠色丁香久久婷婷综| 色爽爽爽爽爽爽爽爽| 日本一区二区三区视频在线看| 九九精品在线播放| 欧美一区二不卡视频| 五月婷婷欧美视频| 中文字幕第20页| 国内不卡的二区三区中文字幕 | 一本色道久久综合亚洲精品不卡| 精品视频一区二区| 成人日韩在线| 欧美成人久久久| 五月婷婷在线观看视频| 在线观看免费一区| 国产精品三区在线观看| 成人免费毛片片v| 免费黄色特级片| 亚洲激情中文| 久久偷窥视频| 成人污污www网站免费丝瓜| 欧美激情a∨在线视频播放| 欧美精品a∨在线观看不卡 | 日韩免费在线看| 麻豆av免费在线观看| 精品国产乱码久久久久久久| 久久亚洲精品石原莉奈| 国产精品传媒在线| 亚洲视频在线播放免费| 久久99深爱久久99精品| 黄色一级片在线看| 日韩精品网站| 国内精品二区| 成人在线视频国产| 91国内在线视频| 蜜桃av在线免费观看| 亚洲精品国产精品国自产在线 | 日本熟女毛茸茸| 亚洲欧美精品午睡沙发| 青青草视频成人| 国产成人精品免费| 国产成人美女视频| 久久国产毛片| 成人免费看片'免费看| jizzjizz欧美69巨大| 国产精品免费一区二区三区在线观看| 色猫猫成人app| 538国产精品视频一区二区| 成人三级网址| 日韩视频―中文字幕| 亚洲av片一区二区三区| 欧美不卡一区二区三区四区| 在线观看国产小视频| 欧美视频一二三| 国产主播在线观看| 亚洲欧美日韩久久| 在线观看天堂av| 国产亚洲精品aa午夜观看| 国产精品扒开腿做爽爽爽a片唱戏| 精品一区二区三区在线视频| 五月婷婷狠狠操| 久久av一区二区三区| 青青青免费在线| 黄色成人在线网址| 青青草综合在线| 欧美成人综合| 8x8ⅹ国产精品一区二区二区| 91日韩免费| 性欧美大战久久久久久久免费观看| 六月丁香久久丫| 国产精品18毛片一区二区| 国产精品久久久久久久久久辛辛 | 国产精品成人一区二区不卡| 日韩欧美在线电影| 国产探花一区| 日本福利一区二区三区| 色棕色天天综合网| 欧美大香线蕉线伊人久久国产精品 | 色播五月激情综合网| 五月婷婷中文字幕| 欧美视频在线视频| 人妻丰满熟妇av无码区| 欧美视频13p| 看黄色一级大片| 欧美午夜一区二区三区免费大片| 国产在线一级片| 欧美日韩午夜在线视频| 亚洲天堂中文字幕在线| 欧美日韩免费不卡视频一区二区三区 | 国产老妇另类xxxxx| 黄色片子免费看| 国产99久久久久| 在线免费观看污视频| 91视频国产观看| 极品人妻videosss人妻| 国产精品久久久久久久久久免费看 | 庆余年2免费日韩剧观看大牛| av综合电影网站| 国产精品视频自拍| 久久国产精品免费一区二区三区| 伦伦影院午夜日韩欧美限制| 久草中文在线| 欧美国产乱视频| 亚洲国产欧美日本视频| 国产精品久久久91| 国产日韩中文在线中文字幕| 97中文在线| 奇米影视777在线欧美电影观看 | 婷婷五月精品中文字幕| 26uuu国产日韩综合| 国精产品一区二区三区| 国产精品国产精品国产专区不片| 顶臀精品视频www| 天天综合色天天综合色h| 无码人妻熟妇av又粗又大| 欧美日韩一区二区三区在线| 99久久精品国产成人一区二区| 亚洲国产精品久久91精品| 国际av在线| 超薄丝袜一区二区| 九九色在线视频| 国产91色在线| 伊人www22综合色| 欧美精品一区二区三区四区五区| 日韩在线视屏| 男人用嘴添女人下身免费视频| 蜜桃视频在线观看一区| 女人扒开双腿让男人捅| 国产日本欧美一区二区| 国产女人被狂躁到高潮小说| 欧美色图在线视频| 99在线精品视频免费观看20| 亚洲免费视频一区二区| 国产网友自拍视频导航网站在线观看| 2019中文字幕在线观看| 亚洲一区av| 免费不卡亚洲欧美| 欧美成人综合| 午夜免费看视频| 91色九色蝌蚪| 青青草成人免费| 欧美性生活一区| 日韩在线免费看| 欧美精品手机在线| 欧美黄页免费| 欧美一级二级三级九九九| 国一区二区在线观看| 女人高潮一级片| 国产日韩高清在线| 国产成人一区二区三区影院在线| 69p69国产精品| 国产在线小视频| 91成人天堂久久成人| 亚洲国产高清在线观看| 亚洲在线播放电影| 亚洲一区二区三区免费在线观看| 91视频免费入口| 亚洲欧洲av一区二区三区久久| 无码日韩精品一区二区| 亚洲国产成人在线播放| 亚洲色图美国十次| 成人久久久久久久| 日韩欧美一区二区三区在线视频| 欧美亚洲另类色图| 99久久亚洲一区二区三区青草| 欧美交换国产一区内射| 91精品国产一区二区三区 | 国产精品久久久久久久久久久免费看| 中文字幕高清在线免费播放| 亚洲国产成人精品电影| 欧美理论片在线播放| 999热视频| 欧美国产先锋| 涩视频在线观看| 国产成人avxxxxx在线看| 777电影在线观看| 日本久久91av| 九九热线有精品视频99| 免费毛片小视频| 9人人澡人人爽人人精品| 日本亚洲色大成网站www久久| 欧美mv日韩mv国产| 午夜dj在线观看高清视频完整版| 91亚洲人电影| 自拍日韩欧美| ass极品水嫩小美女ass| 一区二区三区在线视频免费观看| 99久久久久成人国产免费| 久久这里只有精品99| 国产一区二区三区| 少妇一晚三次一区二区三区| 国产高清在线观看免费不卡| 国产亚洲精品码| 亚洲精品久久久久中文字幕欢迎你| 麻豆网站免费在线观看| 欧美日韩精品免费看| 日韩av一级电影| 午夜激情福利电影| 欧美一区日韩一区| 丁香高清在线观看完整电影视频 | 国产精品久久久久久久成人午夜| 久久精品欧美视频| 中文字幕一区二区三区中文字幕| 99在线免费视频观看| 91在线你懂得| 中文字幕黄色av| 欧美日本中文字幕| 天堂成人娱乐在线视频免费播放网站| av视屏在线播放| 亚洲免费成人av| 五月婷婷综合久久| 国产在线高清精品| 在线看片日韩| 亚洲性猛交xxxx乱大交| 欧美精品一级二级| 国产免费拔擦拔擦8x高清在线人| 欧美一区二区在线视频观看| 日本91福利区| 欧美日韩国产精品综合| 亚洲美女久久久| 国产视频网站一区二区三区| 免费国产a级片| 国产精品久久二区二区| 欧美综合视频在线| 国产精品丝袜高跟| 好吊日精品视频| av永久免费观看| 亚洲精品在线三区| 日韩成人一区| 天堂…中文在线最新版在线| 国产精品日韩成人| 午夜精品久久久久久久99| 日韩免费观看av| 亚洲午夜精品久久久久久app| 久久久久99精品成人| 亚洲精品在线观看视频| 欧美性生活一级| 黄色一级视频在线播放|