python调试工具pysnooper用法_python调试神器PySnooper的使用

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

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

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

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

给个简单例子看看就知道了,

import pysnooper

@pysnooper.snoop()

def removeDuplicates(nums):

"""

:type nums: List[int]

:rtype: int

"""

flag = 0

i=1

while i

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

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

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

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

13:03:44.991693 line        28     return len(nums)

13:03:44.991693 return      28     return len(nums)

Return value:.. 3

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

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

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

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

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

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

@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))

查看非本地变量

@pysnooper.snoop(depth=2)

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值