IceCream:Python 调试不用再写 print()
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、基本用法
装起来很简单:
pip install icecream
导入之后直接用:
from icecream import ic
def foo(i):
return i + 333
ic(foo(123))
输出:
ic| foo(123): 456
ic() 会自动检测传入的是变量还是表达式,两边一起打印。字典、列表嵌套再深也能展开看。
不带参数调用 ic(),它会打印当前位置信息:
from icecream import ic
def foo():
ic()
first()
if expression:
ic()
second()
输出:
ic| example.py:4 in foo()
ic| example.py:11 in foo()
这在追踪代码执行路径时很实用。
3、几个顺手的设计
ic() 返回传入的参数本身,所以可以无缝插进现有代码:
a = 6
def half(i):
return i / 2
b = half(ic(a)) # 输出 a 的值,同时正常参与计算
ic.format() 把输出变成字符串,方便接进日志系统:
from icecream import ic
s = 'sup'
out = ic.format(s) # 返回 "ic| s: 'sup'"
ic.disable() 和 ic.enable() 控制全局开关,上线前不需要逐行删除调试代码。
用 install() 可以把 ic() 注入 Python 内置模块,所有文件直接调用,不用再逐个导入:
from icecream import install
install()
输出格式也能自定义。前缀可以改成任意字符串或函数,输出目标可以从 stderr 切到 logging,参数序列化方式也能替换。甚至可以用 functools.singledispatch 注册特定类型的格式化函数,比如 numpy 数组只打印 shape 和 dtype。
4、适合哪些人用
- 还在用
print()调 Python 代码的开发者 - 需要快速查看变量状态和代码执行路径的人
- 项目里调试代码和日志系统需要灵活切换的场景
IceCream 只干一件事:把 print 调试的体验提上去。它没打算替代 pdb 这类正经调试器,只是在日常开发里让那几十行 print() 写得快一点、看得清楚一点。对大多数 Python 开发者来说,这就够了。
只干一件事:把 print 调试的体验提上去。它没打算替代 pdb 这类正经调试器,只是在日常开发里让那几十行 print() 写得快一点、看得清楚一点。对大多数 Python 开发者来说,这就够了。
更多推荐
所有评论(0)