文章目录
- 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): 456ic()会自动检测传入的是变量还是表达式,两边一起打印。字典、列表嵌套再深也能展开看。
不带参数调用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 开发者来说,这就够了。