PySnooper:Python极简调试神器,一行代码搞定变量追踪
PySnooper被誉为Python界的“乞丐版”调试器,无需繁琐配置即可通过装饰器实现函数级详细日志记录。它能自动输出代码执行行号、时间戳及局部变量变化,支持日志文件输出、非本地变量查看及嵌套函数追踪,极大简化了Python代码的调试流程。
PySnooper简介与核心优势
PySnooper在GitHub项目页面上自谦为“poor man's debugger”(乞丐版调试器),但这并不影响其强大的功能。
在Python开发中,当代码未按预期运行、需要确认执行路径或排查局部变量状态时,开发者通常依赖带有断点和观察模式的调试器,或者通过print语句手动打印信息。
传统方法往往设置繁琐或操作粗心容易出错,而PySnooper仅需为待调试函数添加一个装饰器,即可自动生成包含代码行、执行时间及局部变量变更时刻的详细运行日志。
其“乞丐版”之名源于极低的接入成本:开发者无需进行任何环境配置,即可在任何规模的代码库中直接使用。只需添加装饰器并指定日志输出路径,即可开始调试。
GitHub项目地址
安装与基础使用示例
安装
pip3 install pysnooper
import pysnooper
@pysnooper.snoop()
def number_to_bits(number):
if number:
bits = []
while number:
number, remainder = divmod(number, 2)
bits.insert(0, remainder)
return bits
else:
return [0]
number_to_bits(6)
返回日志如下
Starting var:.. number = 6 21:14:32.099769 call 3 @pysnooper.snoop() 21:14:32.099769 line 5 if number: 21:14:32.099769 line 6 bits = [] New var:....... bits = [] 21:14:32.099769 line 7 while number: 21:14:32.099769 line 8 number, remainder = divmod(number, 2) New var:....... remainder = 0 Modified var:.. number = 3 21:14:32.099769 line 9 bits.insert(0, remainder) Modified var:.. bits = [0] 21:14:32.099769 line 7 while number: 21:14:32.099769 line 8 number, remainder = divmod(number, 2) Modified var:.. number = 1 Modified var:.. remainder = 1 21:14:32.099769 line 9 bits.insert(0, remainder) Modified var:.. bits = [1, 0] 21:14:32.099769 line 7 while number: 21:14:32.099769 line 8 number, remainder = divmod(number, 2) Modified var:.. number = 0 21:14:32.099769 line 9 bits.insert(0, remainder) Modified var:.. bits = [1, 1, 0] 21:14:32.099769 line 7 while number: 21:14:32.099769 line 10 return bits 21:14:32.099769 return 10 return bits
高级功能:日志输出与变量追踪
PySnooper特征
若标准错误输出难以获取或内容过长,可将日志定向至本地文件:
@pysnooper.snoop('/my/log/file.log')
查看一些非本地变量的值:
@pysnooper.snoop(variables=('foo.bar', 'self.whatever'))
展示我们函数中调用函数的 snoop 行:
@pysnooper.snoop(depth=2)
将所有 snoop 行以某个前缀开始,更容易定位和找到:
@pysnooper.snoop(prefix='ZZZ ')
更可以用来获取TensorFlow 的各种张量信息,十分强大。妈妈再也不用担心我找不到bug啦! (2019.5.7更新:有时会不起作用,不知是自己姿势不对还是其他原因。)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













