PySnooper:实时看行号 / 变量值,摆脱 print 的函数调试工具

开篇:调试也能这么爽?
你是不是和我一样,天天跟 print() 打交道,一行行地往代码里塞调试信息?有时候加完又删,删完又忘,简直要疯掉!要是能像 Bash 的 set -x 那样,一键打开“观察模式”,刷出所有执行流和变量变化就好了……好消息来了,PySnooper 完全满足你这种“懒”需求!

PySnooper 是个啥东东?

  • • “极简的调试器”:不用重装 IDE、不开多余端口,随用随走
  • • 像 set -x,但更花哨:记录每行执行时间、前后变量变化
  • • 就是给你要调试的函数,贴个装饰器,剩下交给它

它解决了哪些痛点?

  1. 1. 不用 再写一堆 print(f”…”)。
  2. 2. 调试信息全,包含执行时间戳、行号、变量新旧值。
  3. 3. 线下/生产环境里也能用,不担心影响主流程。
  4. 4. 快速定位漏跑分支、变量被意外修改的问题。

安装、使用超简单
安装只需一行:

pip install pysnooper

(如果你玩 Conda、Arch、Fedora 也都支持,见下表)

表:多种安装方式对比

平台

安装命令

备注

Pip

pip install pysnooper

最主流

Conda

conda install -c conda-forge pysnooper

喜爱用 Anaconda 的首选

Arch Linux

yay -S python-pysnooper

Arch 用户福利

Fedora

dnf install python3-pysnooper

Fedora 上直接装

快速上手

  1. 1. 装饰器import pysnooper

    @pysnooper.snoop()
    def to_bits(n):
    if n:
    bits = []
    while n:
    n, r = divmod(n, 2)
    bits.insert(0, r)
    return bits
    else:
    return [0]

    to_bits(6)立刻在 stderr(或指定文件)看到每行日志和变量变动。

  2. 2. 上下文管理器import pysnooper, random

    def foo():
    data = [random.randint(1, 1000) for _ in range(10)]
    with pysnooper.snoop():
    lo = min(data)
    hi = max(data)
    mid = (lo + hi) / 2
    print(lo, mid, hi)

    foo()只追踪 with 代码块。

功能速览

功能

描述

示例用法

输出定向

将日志写到指定文件或自定义流

snoop('log.txt')

监视任意表达式

不仅限本地变量,连 foo.bar、self.x['y'] 都能看

snoop(watch=('foo.bar',))

调试深度

追踪子函数调用

snoop(depth=2)

时间戳 & 耗时

显示每行执行的时间戳和累计/单行耗时

——

无侵入性

不改源逻辑,只加一行装饰器或一个 with 块

——

优缺点一览

优点

缺点

零学习成本,秒上手

日志较多,可能要过滤关键信息

不改业务逻辑,随加随删

只适合调试,不能做性能分析

支持各种环境(本地、生产、CI……)

对超大函数可能输出过长

灵活定向:stderr / 文件 / 自定义流

没有可视化界面,全靠文本阅读

总结
总的来说,PySnooper 就像给你的函数装了“透视眼镜”,能实时看见行号、时间戳和变量新旧值,彻底摆脱一行行 print() 的折腾。它不够花哨(列如没有 GUI),也不是性能剖析利器,但用它来“穷追猛打”排查逻辑问题,绝对是省时省心的利器。下次写 Python,想要“即刻回显”“零成本调试”,就试试加个 @pysnooper.snoop() 吧!

项目地址:https://github.com/cool-RR/PySnooper

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...