PySnooper:实时看行号 / 变量值,摆脱 print 的函数调试工具
zhezhongyun 2025-10-14 08:36 5 浏览
开篇:调试也能这么爽?
你是不是和我一样,天天跟 print() 打交道,一行行地往代码里塞调试信息?有时候加完又删,删完又忘,简直要疯掉!要是能像 Bash 的 set -x 那样,一键打开“观察模式”,刷出所有执行流和变量变化就好了……好消息来了,PySnooper 完全满足你这种“懒”需求!
PySnooper 是个啥东东?
- o “极简的调试器”:不用重装 IDE、不开多余端口,随用随走
- o 像 set -x,但更花哨:记录每行执行时间、前后变量变化
- o 就是给你要调试的函数,贴个装饰器,剩下交给它
它解决了哪些痛点?
- 1. 不用 再写一堆 print(f"...")。
- 2. 调试信息全,包含执行时间戳、行号、变量新旧值。
- 3. 线下/生产环境里也能用,不担心影响主流程。
- 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. 装饰器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. 上下文管理器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
相关推荐
- C/C++语言的引用与指针比较说明_c++语言中的引用类型与指针的不同之处
-
在C/C++编程中,引用与指针是实现数据间接访问的核心工具,二者均能优化参数传递效率、支持复杂数据操作,但在本质、语法与使用场景上存在显著差异。混淆二者易导致内存泄漏、悬空访问等严重问题。一、基础概念...
- 再也不点来点去了!用这几条命令,文件管理快10倍!(第003课)
-
大家好,今天给大家介绍如何用命令提示符(CMD)来管理你的文件!听起来可能有点高大上,但其实非常简单,而且一旦学会了,效率超高,特别适合那些喜欢快速搞定事情的朋友。那我们就从基础的操作开始,教你怎...
- C/C++逆向分析实战:变量存储与安全防护全攻略
-
在软件开发的世界里,C/C++语言因其卓越的性能和强大的功能而备受开发者青睐。然而,随着技术的不断进步,逆向工程也逐渐成为一种常见的攻击手段。今天,我们将深入探讨C/C++中不同类型的变量在逆向分析中...
- 简单的python-核心篇-命名空间与作用域
-
命名空间是变量名到对象的映射,作用域决定了变量在哪些地方可以被访问。Python使用LEGB规则来确定变量的作用域。#全局命名空间global_var="我是全局变量"de...
- Jmeter参数化:User Defined Variables-用户定义的变量
-
位置:如下图,Add--ConfigElement--UserDefinedVariables作用:定义你所需要的参数,比如IP使用:${IP}使用的场景:比如域名什么的,可以提出来参数化,以...
- PySnooper:实时看行号 / 变量值,摆脱 print 的函数调试工具
-
开篇:调试也能这么爽?你是不是和我一样,天天跟print()打交道,一行行地往代码里塞调试信息?有时候加完又删,删完又忘,简直要疯掉!要是能像Bash的set-x那样,一键打开“观察模式...
- 组态王入门之建立变量、变量连接、弹窗设计
-
一、建立变量(1)打开组态王软件,左侧找到变量的菜单(2)点击菜单(3)找到变量组,再新建一个二级变量组(4)在新建的泵站分配井阀门中建立变量因是新的PLC需要先建立一个驱动找到西门子àS7-200(...
- 为什么老外还是喜欢在官方网站上买东西?
-
今天看了一下一些品牌的官方网站,从浏览到购买支付流程都是很顺畅的,而一些国外的品牌在国内的网站好多都是引导至微信小程序或是淘宝京东上面去购买。国外的品牌官网好像都很简单,比如一些卖服装的类的,基本就是...
- 支撑京东小程序的开发框架 「Taro」,免费学习
-
转载自:性能与架构公众号Taro简介现在小程序平台太多了,例如:微信小程序QQ小程序支付宝小程序百度小程序字节跳动小程序针对他们都各自开发一套的话开发成本就太高了。如果写一套代码,就能开发出适配这么...
- 比较工具大集合_比较各种工具在编辑使用pl/sql程序过程中的优劣
-
现在各大网络平台流传着大量的文件夹和文件比较工具,其中不乏滥竽充数的,软件使用不够流畅,对比功能不够强大。很多人要么找不到合适的工具,要么在寻找过程中浪费了大量的时间,下面小编就和大家分享一些个人私藏...
- 关于前端开发的20篇文档与指南_前端开发文档怎么编写
-
相信在2015年很多这个行业的人都会有这样的两种感受:真的不知所措,这个行业到底有多少东西需要去学习;渴望更多,并迫不及待的为接下来的学习寻求一些思想方向。第一个来自于我们的个人感受,而第二个则是纯粹...
- 成为一名合格的前端架构师,前端知识技能与项目实战教学
-
一、教程描述本套前端架构师教程,大小35.94G,共有672个文件。二、教程目录01.node介绍和环境配置(共6课时)02.ES6语法(共5课时)03.node基础(共29课时)04.Express...
- 吃透 Vue 项目开发实践|16个方面深入前端工程化开发技巧【下】
-
前言前面两篇文章总结了Vue开发的大部分技巧和内容,最后一篇文章来对它进行一个收尾这篇文章我们来谈谈一些Vue理解和实践要求高一点的问题首先是生命周期这一块内容,随着实践越多它的意义越大,理解...
- 在w3cschool上学完html、css后要怎么提升
-
原标题:在w3cschool学完html,css,javascript,jquery以后,还是不会做前端怎么办?w3cschool是一个非盈利性的在线技术学习网站,提供按W3C标准编写的基础教程。完整...
- 从0到1无比流畅的React入门教程_react教程推荐
-
React是什么简介用于构建Web和原生交互界面的库React用组件创建用户界面通俗来讲:==是一个将数据渲染为HTML视图的开源JS库==其他信息Facebook开发,并且开源为什么使用R...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- HTML button formtarget 属性 (30)
- opacity 属性 (32)
- transition 属性 (33)