还在靠 print("here") 找 bug?
你不是在调试,是在玩捉迷藏。
今天这 5 个工具,能让你一眼看穿代码的“五脏六腑”。
1. pdb:Python 自带的“手术刀”
别小看标准库——pdb 是 Python 内置的调试器,不用装、不用配,随时开刀。
import pdb
defbuggy_func(x):
y = x * 2
pdb.set_trace() # 程序停在这儿!
return y + 1
buggy_ctx(5)
敲 n 下一步,l 看代码,p y 打印变量。
比 print 快十倍,还不会污染日志。
2. VS Code + Python 插件:可视化断点调试
装上 Python 官方插件 + Pylance,点一下行号左边,红点一出,断点就位。
defcalculate(a, b):
temp = a + b
result = temp * 2# ← 在这行打个断点
return result
启动调试(F5),变量自动高亮,调用栈清晰可见。
连递归都能一层层剥开,像切洋葱一样爽(不流泪那种 😅)。
3. PySnooper:自动记录每一行执行
不想打断点?试试 PySnooper——它会默默记下函数里每一步干了啥。
import pysnooper
@pysnooper.snoop()
deffactorial(n):
if n <= 1:
return1
return n * factorial(n - 1)
factorial(4)
输出长这样:
Starting var:.. n = 4
Calling factorial(4)
...
>>> Return value from factorial: 24
连中间变量都给你扒干净,比写十行 print 还省事。
安装:pip install pysnooper
GitHub 星标超 15k,不是玩具,是生产力。
4. logging:专业级日志追踪
print 的致命伤:上线后删还是不删?
用 logging,开发时 debug,上线切 warning,一行配置搞定。
import logging
logging.basicConfig(level=logging.DEBUG)
deffetch_user(uid):
logging.debug(f"Fetching user {uid}")
user = db.get(uid)
ifnot user:
logging.warning(f"User {uid} not found")
return user
配合 RotatingFileHandler,还能自动分文件、防爆盘。
大厂标配,小厂偷懒才用 print。
5. icecream:比 print 香十倍的“甜品”
名字可爱,功能狠辣。
ic() 不仅打印值,还打印表达式本身!
from icecream import ic
x = 10
y = 20
ic(x + y) # 输出:ic| x + y: 30
嵌套调用?照样清晰:
ic(factorial(3)) # ic| factorial(3): 6
安装简单:pip install icecream
从此告别 print("x=", x) 的原始时代 🍦
为什么 print 是“技术债”?
据 GitHub 统计,超过 68% 的 Python 项目在 PR 中被要求“移除调试 print”。
别让同事在 code review 时翻白眼 😒
选哪个?看场景!
- 快速本地验证 →
icecream 或 PySnooper - 复杂逻辑追踪 →
pdb 或 VS Code 断点 - 生产环境监控 →
logging + 日志平台(如 ELK)
真正的高手,从不用 print 调试。
不是因为他们聪明,而是他们知道:工欲善其事,必先利其器 🔧