PySnooper:Python极简调试神器,一行代码搞定变量追踪

Mason
Mason
发布时间:2026-10-13 | 4人浏览过
原创

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更新:有时会不起作用,不知是自己姿势不对还是其他原因。)

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

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表