PySnooper高级参数调优10例custom_repr、max_variable_length、prefix、normalize、thread_info完全指南【免费下载链接】PySnooperNever use print for debugging again项目地址: https://gitcode.com/gh_mirrors/py/PySnooperPySnooper是一个 Python 调试工具号称再也不需要用 print 调试。你只需要给函数加一行装饰器pysnooper.snoop()它就能逐行打印出执行的代码行和每个局部变量的变化。入门很容易但真正提升排查效率的是它的一批高级参数。本文用 10 个实际例子把custom_repr、max_variable_length、prefix、normalize、thread_info这些常用高级参数讲透。一、准备工作1 分钟上手先确认安装$ pip 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]运行后标准错误输出里会出现类似上图的逐行日志每一行代码何时执行、变量何时新建New var、何时被修改Modified var、最终返回值一目了然。下面 10 个例子都基于这个函数演示参数细节可参考官方 ADVANCED_USAGE.md 与 pysnooper/tracer.py 的源码。二、10 个参数调优实例例 1用custom_repr自定义类型显示numpy 场景默认 repr 打印一个大矩阵会刷屏。custom_repr接受(类型, 显示函数)的元组组合def print_ndarray(a): return ndarray(shape{}, dtype{}).format(a.shape, a.dtype) pysnooper.snoop(custom_repr((numpy.ndarray, print_ndarray),)) def sum_to_x(x): a numpy.zeros((10, 10)) return a.sum()日志里就会显示a ndarray(shape(10, 10), dtypefloat64)而不是几行数字。匹配规则按顺序进行命中一条就不再检查后面的见 pysnooper/utils.py 中的get_repr_function。例 2用条件函数代替类型判断第一个元素不一定要是类型也可以是返回 True/False 的函数。比如只关心超长列表的长度def is_large_list(l): return isinstance(l, list) and len(l) 5 def print_list_size(l): return list(size{}).format(len(l)) pysnooper.snoop(custom_repr((is_large_list, print_list_size),)) def sum_to_x(x): l list(range(10000)) return sum(l)输出变成l list(size10000)日志清爽很多。例 3用max_variable_length放宽截断长度变量和异常默认被截断到100 字符中间用...省略实现见 pysnooper/utils.py 的truncate。想多看点细节pysnooper.snoop(max_variable_length200)例 4用max_variable_lengthNone彻底关闭截断排查字符串到底长什么样这类问题时截断本身反而碍事pysnooper.snoop(max_variable_lengthNone)⚠️ 注意变量可能是几 MB 的大对象建议只在临时排查时打开。例 5用prefix给日志加前缀方便 grep日志混在一堆其他输出里时加个醒目前缀pysnooper.snoop(prefixZZZ )之后grep ZZZ app.log就能一次性抽出所有 snoop 行。前缀是在每条日志写入时统一拼接的tracer.py 的write方法。例 6用normalize抹掉机器信息便于对比时间戳、绝对路径、内存地址都是机器相关数据导致两次运行的日志无法直接 diff。normalizeTrue会把时间戳清空、路径只保留文件名、repr 中的0x...地址移除pysnooper.snoop(normalizeTrue)这在回归对比改代码前后行为是否一致时非常实用归一化逻辑见 pysnooper/utils.py。例 7用thread_info定位多线程问题多线程程序里多条线程的日志交织在一起thread_infoTrue会在每行前面加上线程ID-线程名并对齐补白pysnooper.snoop(thread_infoTrue)这样一眼就能分清哪条日志来自哪个线程。注意normalize与thread_info不能同时使用tracer.py。例 8用relative_time显示相对耗时默认时间戳是墙上时钟绝对时间对比两行代码间隔不直观。relative_timeTrue改为相对函数开始的耗时pysnooper.snoop(relative_timeTrue)配合上面的例子你能直接看出第 3 行之后卡了 500ms这类性能线索。例 9用colorFalse关闭彩色输出Linux/macOS 上日志默认带颜色Windows 默认关闭。写入日志文件或管道处理时建议关掉避免 ANSI 转义码污染文件pysnooper.snoop(/my/log/file.log, colorFalse)例 10生产级组合拳真实排查时通常多个参数一起用。一个推荐的排查大对象 多行日志组合pysnooper.snoop( /tmp/snoop.log, # 输出到文件 prefixZZZ , # 方便 grep max_variable_length300, # 多看点细节 relative_timeTrue, # 看耗时 )另外提醒设置环境变量PYSNOOPER_DISABLED1可以让 PySnooper 整体静默方便代码里常驻装饰器、临时关调试。三、参数速查表参数默认值作用custom_repr()按类型/条件自定义变量显示max_variable_length100变量截断长度None表示不截断prefix每行日志前缀便于 grepnormalizeFalse去掉时间戳/路径/地址便于 diffthread_infoFalse显示线程 ID 与名称relative_timeFalse时间戳改为相对耗时color平台相关关闭 ANSI 彩色输出完整签名定义在 pysnooper/tracer.py 的Tracer.__init__想深挖某个参数行为时直接对照源码即可。四、小结 日志太长刷屏 →custom_repr、max_variable_length日志混杂难找 →prefix想对比两次运行 →normalize多线程排查 →thread_info关注性能耗时 →relative_timePySnooper 的哲学始终是零配置也能用而这 10 个参数则让你在企业级项目里同样用得顺手。建议从例 5prefix和例 6normalize开始这两个参数在日常排障中受益最快。【免费下载链接】PySnooperNever use print for debugging again项目地址: https://gitcode.com/gh_mirrors/py/PySnooper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Foam 入门指南:在 VS Code 上构建基于 Wikilink 的个人知识管理系统 Foam 入门指南:在 VS Code 上构建基于 Wikilink 的个人知识管理系统 【免费下载链接】foam A personal knowledge management and sharing system for VSCode 项目地址: https://gitcode.com/gh_mirrors/fo/foam
本文是一份以 Foam 项目官方文档为主线的完整… · 2026/9/21 4:02:05
Material Components Web Tooltip 完整指南:安装、无障碍、定位算法与主题定制 Material Components Web Tooltip 完整指南:安装、无障碍、定位算法与主题定制 【免费下载链接】material-components-web Modular and customizable Material Design UI components for the web 项目地址: https://gitcode.com/gh_mirrors/ma/material-component… · 2026/9/21 4:00:05
ASPICE汽车软件过程改进实战:交付物清单与避坑指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 5:31:28
BRPC+ETCD+CMake文件服务高并发工程实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 5:31:28
OPA2192运放频繁烧毁?从电源、布局到自激振荡的故障根因与整改方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 5:31:28
PX4+MID360+FAST-LIO无GPS室内无人机悬停实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 5:31:28
空间插值方法选择与参数优化:从IDW到克里金的实战指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 5:31:28
做路线图的网站避坑指南:5个细节省下3万块 做路线图的网站避坑指南:5个细节省下3万块 找建站公司最怕什么?不是代码写不出来,而是花了大价钱,做出来的“路线图”网站慢如蜗牛,搜索引擎还搜不到。很多老板一上来就问“多少钱”,结果被忽悠签了高价合同,最后发现网站连基础的性能优化都没做。这份避坑指南,就是帮你把每一分钱都花在刀刃上,特别是针对做路线… · 2026/9/21 5:31:20
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化 直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39
Word表格编号全攻略:从列表编号到题注交叉引用 写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39
从第一个站到第二个站:独立开发者的静态网站选型与落地实践 1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18