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

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

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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。