加入收藏 | 设为首页 | 会员中心 | 我要投稿 萍乡站长网 (https://www.0799zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Python里三个高逼格的调试神器

发布时间:2019-10-14 08:46:45 所属栏目:建站 来源:大刘
导读:副标题#e# 调试是开发过程中不可避免的一个环节,在Python中我们使用print、logging、assert等方法进行调试既简单又实用,但毕竟有其局限性。今天这篇文章为大家带来三个工具,其中有Python的内置模块也有第三方库,它们提供了调试代码所需的大部分常用功能

PySnooper也是一个Python的第三方库,他的特点是能够精准的显示每条代码的执行顺序、执行时间以及随之带来的局部变量的改变等等。值得一提的是,作为一个发布不满半年的库,PySnooper在github上已经达到了1.2W星,其受欢迎程度可见一斑。

Python里三个高逼格的调试神器

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跟踪监控的结果,正如上面所说,他准确记录的每条代码的运行时间、顺序以及相关的变量值。

(编辑:萍乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读