gpt4 book ai didi

python调试神器PySnooper的使用

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 33 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python调试神器PySnooper的使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

相信很多小伙伴平时写python的时候都是需要调试程序的,出问题了,需要了解函数内部是怎么跑的,而这个时候很多人都会想到在疑惑的地方使用print函数来打印一下参数来调试。虽然用print也是不失为是一种方法,但是有时如果疑惑的地方多就要每个地方都要加print,这样就显得比较麻烦了.

今天发现在Github开源了一个神器,可以清楚让你清楚了解函数内部的运行以及参数值的变化,PySnooper,项目地址:https://github.com/cool-RR/PySnooper 。

使用简单,强大,谁用谁知道它的好!下面简单说一下PySnooper的用法:

这个工具使用起来很简单,首先直接可以使用 pip 安装:pip install pysnooper使用时,只需要在每个函数前面添加装饰器即可。 给个简单例子看看就知道了, 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pysnooper
@pysnooper .snoop()
def removeDuplicates(nums):
   """
   :type nums: List[int]
   :rtype: int
   """
   flag = 0
   i = 1
   while i< len (nums):
     if nums[i] = = nums[i - 1 ]:
       flag + = 1
       i + = 1
       if flag> = 2 :
         del nums[i - 1 ]
         i - = 1
     else :
       i + = 1
       flag = 0
   return len (nums)
 
nums = [ 1 , 1 , 1 , 2 ]
print (removeDuplicates(nums))

添加装饰器后,运行代码就会输出对应函数的执行数据 。

Starting var:.. nums = [1, 1, 1, 2] 13:03:44.990194 call        11 def removeDuplicates(nums): 13:03:44.990695 line        16     flag = 0 New var:....... flag = 0 13:03:44.990695 line        17     i=1 New var:....... i = 1 13:03:44.990695 line        18     while i<len(nums): 13:03:44.990695 line        19         if nums[i]==nums[i-1]: 13:03:44.990695 line        20             flag+=1 Modified var:.. flag = 1 13:03:44.990695 line        21             i+=1 Modified var:.. i = 2 13:03:44.991193 line        22             if flag>=2: 13:03:44.991193 line        18     while i<len(nums): 13:03:44.991193 line        19         if nums[i]==nums[i-1]: 13:03:44.991193 line        20             flag+=1 Modified var:.. flag = 2 13:03:44.991193 line        21             i+=1 Modified var:.. i = 3 13:03:44.991193 line        22             if flag>=2: 13:03:44.991193 line        23                 del nums[i-1] Modified var:.. nums = [1, 1, 2] 13:03:44.991193 line        24                 i-=1 Modified var:.. i = 2 13:03:44.991193 line        18     while i<len(nums): 13:03:44.991193 line        19         if nums[i]==nums[i-1]: 13:03:44.991193 line        26             i+=1 Modified var:.. i = 3 13:03:44.991693 line        27             flag=0 Modified var:.. flag = 0 13:03:44.991693 line        18     while i<len(nums): 13:03:44.991693 line        28     return len(nums) 13:03:44.991693 return      28     return len(nums) Return value:.. 3 。

当然如果嫌弃这个直接输出内容还想保存日志记录的话,这个装饰器还几个可选参数,例如:

?
1
@pysnooper .snoop( 'log/file.log' )

先创建好log目录,然后将日志输出到file文件中.

?
1
@pysnooper .snoop(prefix = 'removeDuplicates: ' )

给调试的行加个前缀名便于辨识和定位,这个参数适用于如果同时调试多个函数使用,我这里的例子是使用了函数名称来作为前缀名,摘抄一点日志记录如下:

?
1
2
3
removeDuplicates: Starting var:.. nums = [ 1 , 1 , 1 , 2 ]
removeDuplicates: 13 : 53 : 14.322036 call    11 def removeDuplicates(nums):
removeDuplicates: 13 : 53 : 14.323037 line    16   flag = 0
?
1
@pysnooper .snoop(variables = ( 'foo.bar' , 'self.whatever' ))

查看非本地变量 。

?
1
@pysnooper .snoop(depth = 2 )

显示函数中调用函数的snoop行,depth参数的取值范围是大于或等于1的正整数,在源码里有这样一个判断:assert self.depth >= 1,当取小于1的值就会抛异常 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://www.jianshu.com/p/d26bf8950b59 。

最后此篇关于python调试神器PySnooper的使用的文章就讲到这里了,如果你想了解更多关于python调试神器PySnooper的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com