再牛的程序员也没法一口气把代码全部写正确,通常做法就是写一小段然后验证代码正确性,再继续写下一段,这样能保证代码不会错得太离谱。怎么衡量一小段代码呢?在你觉得这段代码没有十足把握的情况下就应该停下来验证一下。
调试的本质是确认你认为正确的事情确实是正确的,这次来介绍一下 Python 中调试代码的 N 种姿势
print 函数使用简单方便,所以开发中我们经常使用它做简单调试,来打印某个值是否是否则预期的。 不过 print 也有不足的地方,如果想打印一个复杂对象,或者是很长的字典、列表等复合对象时,打印的结果堆在一行,很不友好,想看下数据的结构还不容易,例如:
pprint
好在 Python 内置了另一个打印工具 pprint,全称叫 pretty printer,顾名思义就是加了美颜效果的打印工具,在打印复杂的对象时,以可读的格式输出,当然你还可以自己指定缩进和行的最大宽度,这在遇到复杂对象时非常有帮助,例如:
prettyprinter
人类对美的追求是没有终点的,虽然 pprint 已经够用了,但是总有人觉得它还不够美,于是有人就在此基础上搞出一个更强大的打印工具叫 prettyprinter, 这是个第三方工具,需要额外安装。你可以看到时间对象更可读,不过我有感觉有点冗余,在Linux环境下还可以变色。项目地址:https://github.com/tommikaikkonen/prettyprinter/tree/master/prettyprinter
logging
在开发过程中使用 print 调试代码方便又简单,但上线前一定要把这些冗余代码去掉,否则还会影响性能。那么线上某些关键位置想跟踪怎么办,这时 logging 的作用就发挥出来了。很多时候在测试环境不会出现的异常放正式环境就出现了,因为你要面对的各种临界条件,使用 logging 的好处不言而喻,可以设置不同的日志级别,例如 debug、info、error 等级别,你还可以将日志持久化,方便后续做日志追踪。
PDB
PBD 是 Python 的内置模块,是一个真正用于代码调试的,因为你可以在代码运行的时候设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。PDB 在早期还没有集成开发工具IDE的时候,非常有用(现在也使用),只需要一个命令:
python -m pdb test.py
就可以进入调试模块,不喜欢用 IDE 的同学可以考虑使用。
PyCharm
但是现在有更先进的开发工具了,像 PyCharm、PyDev 这样的工具都支持代码调试、打断点、动态修改变量值等等,不仅如此,PyCharm 还支持远程调试。在 Bug 隐藏比较深的情况下,我们有时就会祭上这样的大杀器。