相比Print调试往往需要写很多行Print语句,使用PySnooper仅仅一行代码就能实现对整个函数的调试,更加高效;相比Logging模块,使用PySnooper无需进行繁琐的配置,更加简单。
example:
执行这段代码,输出结果(节选)如下:
只需要导入pysnooper模块,并且给函数加上装饰器@pysnooper.snoop(),我们就可以实现对一个python函数进行监听。
在上面的例子中,根据输出结果,我们可以得到:
- 程序执行步骤的顺序
- 程序中变量的值的变化情况
pysnooper支持灵活多样的程序调试,包括但不限于:
- 给函数添加装饰器@pysnooper.snoop(),完成对函数的监听
- 使用with pysnooper.snoop()语句,实现对程序块(block),即一行或者多行程序进行监听
- 使用@pysnooper.snoop(‘my/file.log’),将监听结果重定向到文件系统
- 监听非局部变量的值:@pysnooper.snoop(variables=('foo.bar','self.whatever'))
- 监听一个列表或者字典变量的所有元素或者属性:@pysnooper.snoop(watch=('foo.bar','self.x["whatever"]'))
- 深度监听--监听函数中的行所调用的其他函数:@pysnooper.snoop(depth=2)
- 在多线程序中,指定监听哪些线程:@pysnooper.snoop(thread_info=True)
PySnooper的更多高级用法参见:
https://github.com/cool-RR/PySnooper#advanced-usage