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

日韩av中文字幕一区| 国产精品爽爽久久久久久| 精品网站aaa| 精品女厕一区二区三区| 欧美少妇一区| 91成人在线免费| 欧美视频在线观看| 国产午夜精品理论片a级探花| 日韩av手机版| 久久香蕉av| 国产欧美精品区一区二区三区| 成人黄色av播放免费| 国产午夜久久久| av伊人久久| 日韩精品资源二区在线| 黄色国产精品视频| 国产在线一区二区视频| 91在线视频免费91| 成人在线精品视频| 黑人一级大毛片| 亚洲欧洲美洲一区二区三区| 亚洲精品成人免费| 国产成人在线综合| 成人性生活视频| 一区二区日韩av| 日韩精品一线二线三线| 国产 欧美 自拍| 久久99久国产精品黄毛片色诱| 国产欧美日韩视频一区二区| 日本精品在线观看| 精品国产av色一区二区深夜久久| 欧美精品在线观看| 成人白浆超碰人人人人| 色天使综合视频| 一级在线观看视频| 亚洲一区二区三区视频| 亚洲欧美日韩中文字幕在线观看| 亚洲三级欧美| 亚洲一区二区三区四区不卡| 欧美一区二区视频17c| 亚洲精品人妻无码| 国内成+人亚洲+欧美+综合在线| 国产不卡av在线| 亚洲精品国产精品乱码| 欧美在线高清| 久久国产精品久久久久| 大吊一区二区三区| 久草成人在线| 国产网站欧美日韩免费精品在线观看| 亚洲精品无码一区二区| 老司机亚洲精品一区二区| 欧美日韩中文字幕一区二区| 成人在线观看黄| 在线天堂新版最新版在线8| 亚洲精品中文在线| 久久久久亚洲av无码专区喷水| 视频午夜在线| 99r国产精品| 国产精品入口免费| 欧美一级一区二区三区| 国产91精品露脸国语对白| 91久久国产综合久久蜜月精品| 中文字幕在线观看1| 日韩电影在线看| 国产精品美女网站| h色网站在线观看| 一卡二卡在线视频| 一区三区视频| 国语自产偷拍精品视频偷| 久久综合综合久久| 亚洲日本国产| 欧美中文在线免费| 国内精品视频在线播放| 精品人妻一区二区三区三区四区| 国产最新精品免费| 99九九视频| 男人天堂网在线视频| 97精品电影院| 欧美一区二区三区成人久久片| 国产一区电影| 一区在线观看免费| 日韩一级片一区二区| 成年网站在线视频网站| 欧美日韩激情美女| www.99在线| 免费观看亚洲视频大全| 亚洲成人av片| 亚洲一区二区三区蜜桃| 日韩免费久久| 欧美国产亚洲精品久久久8v| 麻豆久久久久久久久久| 日韩电影在线免费观看| 成人亚洲激情网| 日本加勒比一区| 国产农村妇女精品| 男人添女人下部视频免费| 美女av在线免费看| 欧美三片在线视频观看| 国产成人精品综合久久久久99| 婷婷激情久久| 久久久精品免费| 欧美日韩综合在线观看| 麻豆精品一区二区| 狠狠久久综合婷婷不卡| 日韩成人影视| 精品magnet| 色一情一区二区三区| 精品自拍偷拍| 日韩中文综合网| 久久精品国产av一区二区三区| 日韩av中文字幕一区二区三区 | 亚洲第一香蕉网| 久久国产中文字幕| 午夜精品一区二区三区在线播放| 欧美激情一区二区三区免费观看| 国产91高潮流白浆在线麻豆| 色播五月综合| 亚洲男女在线观看| 国产区精品区| 久久免费观看视频| 国产一区二区三区四区视频| 26uuu亚洲综合色| 特大黑人娇小亚洲女mp4| 四虎4545www精品视频| 亚洲高清免费观看高清完整版| 成人18视频免费69| 首页综合国产亚洲丝袜| 国产精品对白一区二区三区| 日本最黄一级片免费在线| 色老综合老女人久久久| 制服丝袜在线第一页| 亚洲欧美在线专区| 国产精品影院在线观看| 久青草国产在线| 欧美日韩国产中字| 波多野结衣影院| 亚洲精品色图| 国产欧美亚洲日本| 亚洲大胆人体大胆做受1| 欧美精选在线播放| 国产精品1区2区3区4区| 久久三级视频| 欧美日韩亚洲在线| 欧美男男tv网站在线播放| 精品国产一区二区三区不卡| 日本老熟俱乐部h0930| 黄页视频在线91| 亚洲精品欧美精品| 韩国主播福利视频一区二区三区| 日韩国产高清视频在线| 日韩av黄色片| 不卡电影一区二区三区| 欧美午夜小视频| 久久综合五月婷婷| 97视频在线观看免费高清完整版在线观看 | 国产精品自在线| 18免费在线视频| 欧美日韩免费一区二区三区| 亚洲女人久久久| 精久久久久久久久久久| 最新视频 - x88av| 伊人精品综合| 97视频在线观看播放| 少妇光屁股影院| 天然素人一区二区视频| 亚洲欧美日韩精品| 国产女主播喷水视频在线观看| 91免费版在线看| 成人在线激情网| 久久中文字幕av一区二区不卡| 国产精品视频色| 麻豆91在线| 精品日韩在线观看| 国产欧美日韩另类| 久久久久久9999| 在线观看的毛片| 天天做综合网| www.av一区视频| 亚洲天堂导航| 日韩亚洲第一页| 草逼视频免费看| 精品欧美国产一区二区三区| 免费毛片视频网站| 久久狠狠亚洲综合| www.18av.com| 国产va在线播放| 久久中文欧美| japanese在线视频| 国产精品调教| 国产国语videosex另类| 免费日本一区二区三区视频| 日韩欧美第一区| 伊人手机在线视频| 国产精品免费视频观看| 国产av一区二区三区传媒| 香蕉久久夜色精品| 黄色一级片网址| 琪琪久久久久日韩精品| 国产精品无av码在线观看| 日本动漫理论片在线观看网站 | 羞羞答答一区二区| 国产中文欧美精品| 19禁羞羞电影院在线观看| 中文字幕欧美日韩在线| 丰满肉嫩西川结衣av| 在线免费观看日本欧美| 欧美成欧美va| 国产精品午夜春色av| www.成人黄色| 久久不射中文字幕| 人妻无码一区二区三区四区| 国产一区二区三区网| y111111国产精品久久婷婷| 黑人巨大精品欧美一区二区桃花岛| 久久精品视频一| 九色在线播放| 亚洲国产精品高清久久久| 在线免费看91| 欧美日韩精品中文字幕| 欧美日韩在线视频免费| 国产精品免费看片| 中文字幕丰满孑伦无码专区| 成人综合婷婷国产精品久久蜜臀 | 国产不卡在线一区| 少妇激情一区二区三区| 在线日韩视频| 亚洲人成网站在线播放2019| 天天躁日日躁狠狠躁欧美巨大小说 | 做爰高潮hd色即是空| 国产欧美日韩一区二区三区四区| av日韩免费电影| 国产亚洲精彩久久| 日本亚洲欧洲色α| 国产美女高潮在线观看| 欧美国产日韩视频| av在线下载| 久久精品国产99国产精品澳门| 国产三级在线免费| 国产视频亚洲视频| 精品人妻一区二区三区麻豆91| 欧美男男青年gay1069videost | 中文字幕电影av| 国产精品美女久久久久久| xxxxx99| 国产欧美精品国产国产专区| a级在线免费观看| 久久精品欧美一区二区三区麻豆| 中文字幕在线免费看线人| 播五月开心婷婷综合| 中文字幕乱码一区| 97久久精品人人爽人人爽蜜臀| 五月天丁香社区| www.成人网.com| 亚洲人人夜夜澡人人爽| 91网址在线看| 熟女俱乐部一区二区| 久久婷婷久久一区二区三区| 亚洲天堂久久新| 国产欧美一区二区精品仙草咪| 手机av在线不卡| 综合在线观看色| 青青青在线视频| 亚洲成人免费看| 日韩精品一区二区亚洲av| 日韩欧美在线视频| 国产精品成人久久久| 欧美日韩不卡视频| www国产在线| 亚洲国产成人精品久久| 四虎国产精品永远| 亚洲最新在线视频| 欧美边添边摸边做边爱免费| 久久国产精品电影| 大桥未久在线视频| 26uuu久久噜噜噜噜| 成人福利av| 欧美日韩国产第一页| mm视频在线视频| 国产精品第3页| 欧美18—19sex性hd| 国产精品直播网红| 国产日本亚洲| 国产一区二区不卡视频| 午夜a一级毛片亚洲欧洲| 久久免费一区| 97国产精品| 免费人成在线观看视频播放| 亚洲高清毛片| 五月婷婷激情久久| 国产精品资源在线观看| 人妻激情偷乱频一区二区三区| 久久久久久久综合色一本| 久久久久久久久福利| 亚洲国产精品v| 日本老熟俱乐部h0930| 狠狠色狠狠色综合日日五| 亚洲字幕av一区二区三区四区| 91精品国产综合久久蜜臀| 欧美熟女一区二区| 久久精品电影网站| sm久久捆绑调教精品一区| 国产成人精品一区二区在线| 国产一区精品二区| 久久综合婷婷综合| 99久久精品网| 男人操女人免费软件| 九一九一国产精品| 久久久久久婷婷| 自拍偷拍亚洲综合| 五月天综合激情网| 欧美日韩国产乱码电影| 日韩私人影院| 久久久国产一区二区| 欧美成人精品三级网站| 99re在线播放| 精品国产精品| 日本www在线播放| 激情av综合网| 影音先锋资源av| 亚洲蜜臀av乱码久久精品 | 欧美私人啪啪vps| xxww在线观看| 91在线观看视频| 私库av在线播放| 欧美日韩精品欧美日韩精品一综合| 蜜臀av在线观看| 丝袜一区二区三区| 亚洲一区二区三区四区| av在线不卡一区| 日韩精品欧美激情一区二区| 国产极品尤物在线| 国产制服丝袜一区| 国内毛片毛片毛片毛片毛片| 狠狠做深爱婷婷久久综合一区| a天堂在线视频| 久久香蕉国产线看观看av| 午夜欧美巨大性欧美巨大 | 精品国产乱码一区二区三| 中日韩美女免费视频网站在线观看 | 亚洲精品视频播放| 国产精品偷拍| 国产精品 日韩| 91精品99| 三级a三级三级三级a十八发禁止| 久久久美女毛片 | 色爱区综合激月婷婷| 日韩在线观看视频一区二区三区 | 精品久久久三级| 国产精品a级| 性生交大片免费看l| 亚洲色欲色欲www在线观看| 亚洲专区在线播放| 自拍偷拍亚洲欧美| 亚洲日本在线观看视频| 热re99久久精品国产99热| 久久久久久久欧美精品| 免费a v网站| 欧美视频国产精品| 日本一二三区在线视频| 日韩av免费在线看| 国产成人三级| 99视频免费播放| 中文字幕不卡在线播放| 最新国产中文字幕| 久久九九精品99国产精品| www久久久| 欧美日韩在线免费观看视频| 国产精品一区二区在线播放| 日韩欧美国产成人精品免费| 欧美网站大全在线观看| 又爽又大又黄a级毛片在线视频| 国产精品美女www| 亚洲国产日韩欧美在线| av在线免费观看不卡| 亚洲国产乱码最新视频| 日韩欧美电影在线观看| 日韩免费观看高清| 亚洲澳门在线| 欧美老女人bb| 日本国产一区二区| 91在线直播| 97se国产在线视频| 国产精品日韩精品欧美精品| 中文幕无线码中文字蜜桃| 欧美美女激情18p| av网站在线看| 精品国产一区二区三区四区vr| 日本人妖一区二区| 黄色录像免费观看| 亚洲精品一区二区三区福利| 欧美少妇精品| 亚洲三区在线观看| av男人天堂一区| 中文字幕欧美色图| 久久久久免费视频| 亚洲第一福利专区| theporn国产精品| 婷婷综合久久一区二区三区| www.国产精品.com| 国产伦精品一区二区三区四区免费 |