| 
                         PySnooper也是一个Python的第三方库,他的特点是能够精准的显示每条代码的执行顺序、执行时间以及随之带来的局部变量的改变等等。值得一提的是,作为一个发布不满半年的库,PySnooper在github上已经达到了1.2W星,其受欢迎程度可见一斑。 
  
PySnooper的使用可以说是非常的方便,直接在代码中以装饰器的形式调用就可以了。当然在引用前你得使用pip install  pysnooper或者conda install -c conda-forge  pysnooper安装这个库。我们还是举一个例子来进行演示,样例代码如下: 
- import pysnooper 
 - import random 
 - @pysnooper.snoop() 
 - def foo(): 
 -  lst = [] 
 -  for i in range(10): 
 -  lst.append(random.randrange(1, 1000)) 
 -  lower = min(lst) 
 -  upper = max(lst) 
 -  mid = (lower + upper) / 2 
 -  print(lower, mid, upper) 
 - foo() 
 
  
在上面这段代码中,我们先是生成10个1到1000之间的随机数,然后计算他们之中的最大最小值和中位数,唯一的不同在于第三行多了一条语句@pysnooper.snoop(),我们运行以下代码,发现除了正常的print结果之外,多了许多内容(内容太多,下面只显示一部分): 
- 19:51:57.704857 call 16 def foo(): 
 - 19:51:57.705860 line 17 lst = [] 
 - New var:....... lst = [] 
 - 19:51:57.705860 line 18 for i in range(10): 
 - New var:....... i = 0 
 - 19:51:57.705860 line 19 lst.append(random.randrange(1, 1000)) 
 - Modified var:.. lst = [758] 
 - 19:51:57.705860 line 18 for i in range(10): 
 - Modified var:.. i = 1 
 - .................... 
 - 19:51:57.706818 line 22 upper = max(lst) 
 - New var:....... upper = 927 
 - 19:51:57.706818 line 23 mid = (lower + upper) / 2 
 - New var:....... mid = 552.0 
 - 19:51:57.706818 line 24 print(lower, mid, upper) 
 - 19:51:57.706818 return 24 print(lower, mid, upper) 
 - Return value:.. None 
 
  
这都是PySnooper跟踪监控的结果,正如上面所说,他准确记录的每条代码的运行时间、顺序以及相关的变量值。 
作为一个星标1.2W+的项目,PySnooper的功能肯定不会这么简单,@pysnooper.snoop()中是可以接收参数的,比如我们觉得输出内容太多,可以考虑把信息记录到log日志中,这个功能只需要加一个log文件定位参数就能搞定: 
- @pysnooper.snoop('file.log') 
 
  
@pysnooper.snoop()支持的参数还有很多,分别对应了不同的功能,例如监控自定义表达式、监控底层函数、支持多线程等等,详见项目文档。 
此外,pysnooper还支持局部监控,一般来说我们写的代码都比较长,而需要监控的只是其中的一小部分,这时候就可以把需要监控的代码放到一个block里。我们修改下刚才的代码,只对计算最大最小值和中位数的部分进行监控,修改后的代码如下: 
- import pysnooper 
 - import random 
 - def foo(): 
 -  lst = [] 
 -  for i in range(10): 
 -  lst.append(random.randrange(1, 1000)) 
 -  with pysnooper.snoop(): 
 -  lower = min(lst) 
 -  upper = max(lst) 
 -  mid = (lower + upper) / 2 
 -  print(lower, mid, upper) 
 - foo() 
 
  
运行之后发现监控信息精简了很多: 
- New var:....... lst = [562, 341, 552, 353, 628, 302, 430, 188, 955, 108] 
 - New var:....... i = 9 
 - 20:02:47.359272 line 21 lower = min(lst) 
 - New var:....... lower = 108 
 - 20:02:47.359272 line 22 upper = max(lst) 
 - New var:....... upper = 955 
 - 20:02:47.360269 line 23 mid = (lower + upper) / 2 
 
  
使用with pysnooper.snoop()模式依然保留了对各种参数的支持,个人认为这种模式更加符合实践需求。 
小结: 
今天介绍了三个不借助IDE就能方便使用的调试工具,三个工具的调试思路和适用场景也各不相同,大家可以根据需要灵活选用。不过话说回来,我个人最喜欢的还是PySnooper,你最喜欢哪一款呢?                          (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |