调试
Python 调试技术完全指南
调试的重要性
没有人能一次写出完美运行的代码——在Python开发里,一次跑通无bug的概率甚至可能不到1%。有些bug很“友好”:错误信息里直接标了行号和原因,比如IndexError: list index out of range;但有些就藏得很深,需要你扒开程序的运行状态,查变量的具体变化、调用链的逻辑走向。因此,掌握一套系统的调试方法论,是每个Python开发者必须过关的技能。
调试方法概览
我们从最“笨”但最万能的基础方法讲起,逐步过渡到生产级和专业工具级的方案。
1. print() 打印调试法:入门级但不可替代
适用场景:刚写好小片段代码、临时验证某个小变量的取值、快速定位逻辑断点(比如循环里第几次迭代出问题)。
代码示例:
执行结果:
优缺点总结:
- ✅ 优点:零学习成本,任何环境(哪怕只有终端+记事本)都能用
- ❌ 缺点:会污染业务代码,留下大量垃圾输出,还容易忘记删除,影响正式版程序的可读性和性能
2. assert 断言调试法:轻量级约束检查
适用场景:在代码里加“隐含前提”的验证——比如函数传入的参数必须满足什么条件,中间计算的结果不能出现非预期情况。如果断言不通过,程序直接终止报错,而不是带着错误继续跑,产生更难定位的问题。
代码示例:
执行结果:
生产环境注意事项:
断言是可以全局关闭的!用-O(大写字母O,不是数字0)参数运行Python脚本,所有assert语句都会被跳过,不会执行也不会报错:
优缺点总结:
- ✅ 优点:比print()更规范,不需要手动删除,不污染生产代码的输出
- ❌ 缺点:大量使用还是会占业务代码的行数,关闭后如果依赖断言的约束会出问题,生产环境尽量不用
3. logging 日志调试法:生产级调试首选
适用场景:从开发阶段到测试、生产全流程通用——既能看调试信息,又能记录测试和生产的关键数据,不会污染业务代码的业务逻辑,还能灵活控制输出。
基础配置(输出到终端)
高级配置(输出到文件)
如果想把日志保存下来供后续分析,可以加上filename和filemode参数:
常用日志级别(从低到高)
优缺点总结:
- ✅ 优点:全流程通用、可持久化、可灵活配置(级别、格式、输出位置)、生产环境友好
- ❌ 缺点:比前两种方法多一点点配置,但这配置非常值得
4. pdb 命令行调试器:无IDE时的硬核工具
适用场景:服务器上没有IDE/编辑器,只能用终端调试;或者想体验最底层的Python调试逻辑。
方法一:直接启动pdb模式运行脚本
运行脚本时加上-m pdb参数,程序会在第一行代码暂停,等待你的命令:
方法二:在代码里嵌入断点
更常用的是在你怀疑出问题的前一行插入pdb.set_trace(),程序运行到这里就会自动暂停:
常用pdb命令(不用记全,记这几个就行)
调试示例:
5. IDE 集成调试:最顺手的日常方案
适用场景:日常本地开发——图形化界面、断点管理、变量监视、调用栈查看,这些功能组合起来效率比命令行高太多。
主流工具推荐
- Visual Studio Code (VS Code):
- 免费、轻量、插件生态丰富
- 安装官方的「Python」扩展即可使用
- 支持条件断点、数据断点、远程调试
- 下载地址:https://code.visualstudio.com/
- PyCharm:
- 专业Python IDE,对大型项目支持最好
- 有免费的社区版和付费的专业版
- 调试功能最全面,还有代码智能提示
- 下载地址:https://www.jetbrains.com/pycharm/
IDE调试的核心功能
- 打断点:在代码行号左边点击即可,红色圆点表示断点
- 单步调试:和pdb的
s/n类似,但有按钮点更方便 - 变量监视:右侧可以看到所有当前作用域的变量值,也可以自己添加要监视的变量
- 调用栈查看:可以看到当前代码是被哪一层函数调用的,回溯问题来源
调试策略建议
根据不同的开发阶段和环境,选择合适的工具组合:
- 本地日常开发:优先用VS Code/PyCharm的图形化调试
- 临时验证小逻辑:用print()快速试错
- 代码合并前/测试环境:用logging记录关键节点的信息,关闭print()和调试用的assert
- 生产环境排查问题:只用logging,把级别设成WARNING或ERROR,避免产生大量垃圾日志;如果需要更深入的调试,可以临时加pdb.set_trace(),但用完一定要删掉
- 服务器无IDE紧急排查:用pdb命令行调试
终极建议
虽然各种调试工具都有自己的优势,但logging是唯一能从开发用到生产、而且几乎不影响正式版程序的方案。建议在你的Python项目里:
- 统一配置logging的格式和级别
- 合理规划日志内容(不要记太细也不要记太粗)
- 建立简单的日志分析机制(比如定期清理日志、用grep过滤关键错误)
掌握这些调试技术,你就能快速高效地解决Python程序里的绝大多数问题啦!

