news 2026/6/24 4:51:33

IceCream:Python 调试不用再写 print()

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IceCream:Python 调试不用再写 print()

文章目录

  • IceCream:Python 调试不用再写 print()
    • 1、这玩意儿是干嘛的
    • 2、基本用法
    • 3、几个顺手的设计
    • 4、适合哪些人用

IceCream:Python 调试不用再写 print()

gruns/icecream 在 GitHub 上已经拿到 10,058 Star 了。

这是一个 Python 调试库,专门干一件事:让 print 调试变得顺手。你不再需要写print("foo =", foo),一个ic(foo)就能同时打出变量名和值。

1、这玩意儿是干嘛的

写 Python 的人几乎都用print()调过代码。问题是print()太原始了:变量名和值分开写,嵌套字典打印出来挤成一团,多行输出混在一起看不清楚。

IceCream 用ic()替代print(),一行代码同时输出变量名和值,数据结构自动格式化,还有语法高亮。它还能打印执行上下文:文件名、行号、所在函数。这些print()统统给不了。

2、基本用法

装起来很简单:

pipinstallicecream

导入之后直接用:

fromicecreamimporticdeffoo(i):returni+333ic(foo(123))

输出:

ic| foo(123): 456

ic()会自动检测传入的是变量还是表达式,两边一起打印。字典、列表嵌套再深也能展开看。

不带参数调用ic(),它会打印当前位置信息:

fromicecreamimporticdeffoo():ic()first()ifexpression:ic()second()

输出:

ic| example.py:4 in foo() ic| example.py:11 in foo()

这在追踪代码执行路径时很实用。

3、几个顺手的设计

ic()返回传入的参数本身,所以可以无缝插进现有代码:

a=6defhalf(i):returni/2b=half(ic(a))# 输出 a 的值,同时正常参与计算

ic.format()把输出变成字符串,方便接进日志系统:

fromicecreamimportic s='sup'out=ic.format(s)# 返回 "ic| s: 'sup'"

ic.disable()ic.enable()控制全局开关,上线前不需要逐行删除调试代码。

install()可以把ic()注入 Python 内置模块,所有文件直接调用,不用再逐个导入:

fromicecreamimportinstall install()

输出格式也能自定义。前缀可以改成任意字符串或函数,输出目标可以从 stderr 切到 logging,参数序列化方式也能替换。甚至可以用functools.singledispatch注册特定类型的格式化函数,比如 numpy 数组只打印 shape 和 dtype。

4、适合哪些人用

  • 还在用print()调 Python 代码的开发者
  • 需要快速查看变量状态和代码执行路径的人
  • 项目里调试代码和日志系统需要灵活切换的场景

IceCream 只干一件事:把 print 调试的体验提上去。它没打算替代 pdb 这类正经调试器,只是在日常开发里让那几十行print()写得快一点、看得清楚一点。对大多数 Python 开发者来说,这就够了。

只干一件事:把 print 调试的体验提上去。它没打算替代 pdb 这类正经调试器,只是在日常开发里让那几十行print()写得快一点、看得清楚一点。对大多数 Python 开发者来说,这就够了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 6:46:05

Gazebo Sim (gz sim) Mesh 路径报错排查与修复总结

在使用新版 Gazebo Sim (gz sim) 加载模型时,最常遇到的报错是 Could not resolve file 或 Unable to find or download file。这通常是因为下载的模型使用了相对路径,而 Gazebo 引擎无法正确解析。 以下是通过手动修改 URI 路径彻底解决该问题的标准流程…

作者头像 李华
网站建设 2026/6/17 4:32:59

Linux系统管理基础操作

防火墙管理临时关闭防火墙 执行命令停止防火墙服务:sudo systemctl stop ufw永久关闭防火墙 禁用开机自启并停止服务:sudo systemctl disable ufw --now查看防火墙状态 验证服务是否运行或开机自启:sudo systemctl status ufw # 运行状态…

作者头像 李华
网站建设 2026/6/17 4:32:57

esp32开发与应用(题外话之j-link调试)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】大部分的mcu都不带wifi和bt,所以对于esp32来说,可以很好地弥补这一点。因此,如果有网络方面的需求,用…

作者头像 李华
网站建设 2026/6/16 10:58:54

【2026年6月deepseek】设置Okular双页全屏阅读pdf文件

总结一下,Okular是大而全的软件,侧栏导航栏确实多,优化了大文件占用内存过多的情况(待验证),试了一下MuPDF不支持双页显示,安装命令sudo apt install okular 漫画显示选择-对开页面(…

作者头像 李华
网站建设 2026/6/17 7:26:44

手把手教你用PCtoLCD为智能手表项目制作OLED专属字库和图标

智能手表OLED界面开发实战:从PCtoLCD取模到ESP32高效渲染在可穿戴设备井喷式发展的今天,一块精致的OLED屏幕往往成为产品的"门面担当"。不同于传统LCD,OLED屏幕凭借其自发光特性、超高对比度和极低功耗,成为智能手表、健…

作者头像 李华