亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

精通 Python 调试:高效技巧与最佳实践

精通 Python 调试:高效技巧与最佳实践

对许多人而言,Python 调试等于到处加 print 语句,再根据输出猜代码逻辑。这非最佳,但不知为何大家就是不愿碰 Python 调试器。

目录

用 print 调试

若你也是用 print 调试派,我不评判。学 Python 难,编程难,生活难。若已举步维艰,再学新工具确嫌累。塞个 print……就是省事。坦白说:我现在也常这么干,没那么糟糕。

但我要教个小窍门:同样省事,却给你无限调试超能力,想征服世界随时可用。

设置 Python 调试器断点

无需 IDE 也能专业调试。此招通用于最简编辑器,甚至 Jupyter Notebook。
核心就是:在原本加 print 的位置插入 breakpoint() 指令。

效果如何?实测:新建简单程序:

def add_two(x):
    return x + 2
for i in range(1, 10):
    a = add_two(i)
    breakpoint()
    print(a)

运行后(REPL、命令行、IDE 均可),直接进入 Python 调试器 PDB。然后呢?

使用 Python 调试器

运行上述程序,输出:

$ python3 breakpointing.py
> /home/erik/breakpointing.py(7)<module>()
-> print(a)
(Pdb) 

关键信息:
• 当前执行文件(breakpointing.py)
• 即将执行但被 breakpoint() 打断的下一条指令
• PDB 提示符,等待输入

Python 调试器本质是功能完备的 Python Shell,同 REPL。
此刻可审查当前环境。查变量 a 当前值:

(Pdb) print(a)
3
(Pdb) print(i)
1

除 print,PDB 专用命令 p 同样适用:

(Pdb) p a
3
(Pdb) p i
1

执行下一行

想执行下一行?两种方式:

对比:step 会进函数内部断住;next 运行完函数返回后,停在下一行。其他调试器/IDE 称“step into”与“step over”。

实操演示:

$ python3 breakpointing.py
-> print(a)
(Pdb) s
3
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) n
-> breakpoint()
(Pdb) n
-> print(a)
(Pdb) n
4
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) s
--Call--
-> def add_two(x):
(Pdb) s
-> return x + 2
(Pdb) s
--Return--
5
-> return x + 2
(Pdb) s
-> breakpoint()
(Pdb)

首次用 n 跨过 add_two 调用;第二次用 s 步入函数内部。

Python 调试器常用命令

更多命令自行探索,列举最实用者:

完整文档见 Python 官方调试器页面。

持续学习

虽此法极便捷,仍建议深入掌握 IDE 自带调试器。VSCode 用户可参考我写的《VSCode 中调试 Python 代码》教程。

精通 Python 调试:高效技巧与最佳实践

Python

  1. 精简维护提升工厂效率
  2. 设计并3D打印定制ASA杯架适配器,适配您的爱车
  3. 精进PCB设计技能:工程师必修的5大核心实践
  4. 加速生产:原型制造如何优化您的制造流程
  5. 提升钣金件质量的5大实证设计原则
  6. 优化工业设备维护计划的3大实证策略
  7. 借福特扩展的连接车队管理最大化利润
  8. 精通Python输入输出与模块导入:实战指南
  9. Python print() 函数完全指南:基础用法、空行打印与自定义结束符
  10. Python 字符串操作完全指南:替换、连接、分割、反转、大小写转换
  11. Python time.sleep():为代码添加延迟的完整指南
  12. Python print 不换行:掌握 end 参数及其他技巧