对于代码调试的技巧,我之前写过很多的文章,加起来也有 将近 10 篇了,关注比拟早的同学,也应该都有看过。
还没看过的同学,欢送返回查阅:第九章:调试技巧
其中有一篇是对于 pdb 的调试技巧的:
外面介绍了两种 pdb 的调试入口,也是大部分所熟知的。
这里再带大家回顾一下
第一种 :指定 -m pdb
来开启
$ python -m pdb pdb_demo.py
第二种 :应用 pdb.set_trace()
在代码中设置断点
import pdb
pdb.set_trace()
但其实,pdb 还另外两种调试办法,第一种办法,可能有 99% 的开发者都没用过,甚至连见过都没有。
这两种办法,是配合 Python Console 的交互界面来实现的。
首先我筹备好一个名为 utils.py
的 Python 文件,外面定义了一个 sum 的工具函数(仅作演示用)。
def sum(*args):
result = 0
for arg in args:
result += arg
return result
而后在终端敲入 Python 进入 Console 的模式,导入这个模块,并调用 sum 函数,在失常状况下,函数能够失常工作。
>>> import utils
>>> utils.sum(1,2,3)
6
但如果你的参数类型传成了 str,函数就会报错啦~
>>> utils.sum(1,2,"3")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/MING/utils.py", line 4, in sum
result += arg
TypeError: unsupported operand type(s) for +=: 'int' and 'str'
因为这里的报错是我刻意触发的,从报错来看,是很容易定位的。
然而在理论利用中,难免会遇到一些无奈从报错信息直接判断 bug 所在的状况。
这个时候,如果能够在报错后,切换到 pdb 的调试模式就好了~
事实上,pdb 是反对这种用法的。
只有你在以后的会话中,导入 pdb,再执行 pdb.pm()
,就能够切换到相熟的 pdb 调试界面,并在抛错的中央打上断点,而后你就能够任意的查看运行时的变量信息。
如果你不是想等报错了再调试,而是一开始就想进入调试模式,能够应用 pdb.runcall()
函数
有的同学可能还会想到 pdb.run()
和 pdb.runeval()
这两个函数,但这两种办法,是须要提前在函数调试断点的,这就比拟麻烦了,个别状况下不举荐应用。
综上所述,pdb 调试办法次要有六种:
python -m pdb
:运行 python 文件时间接进入调试模式pdb.set_trace()
:当时设置断点,而后间接运行 python 文件pdb.run()
:当时设置断点,而后间接运行 python 模块pdb.runeval()
:当时设置断点,而后间接运行 python 模块(与 pdb.run 相似)pdb.pm()
:在 Console 模式下出错后间接切换到调试模式,并定位到报错地位。pdb.runcall()
:能够在不设置断点的状况下,间接调试代码片段。
其中,pdb.pm()
是本文的重点,他尽管冷门,但却很好用,举荐给大家。
以上就是我明天的分享,心愿对你有用,如果你也有好用的调试小技巧,欢送留言分享,互相学习。
文章最初给大家介绍三个我本人写的在线文档:
第一个文档 :PyCharm 中文指南 1.0 文档
花了两个多月的工夫,整顿了 100 个 PyCharm 的应用技巧,为了让老手可能间接上手,我花了很多的工夫录制了上百张 GIF 动图,有趣味的返回在线文档浏览。
第二个文档 :PyCharm 黑魔法指南 1.0 文档
零碎收录各种 Python 冷门常识,Python Shell 的多样玩法,令人疯狂的 Python 炫技操作,Python 的超具体进阶常识解读,十分实用的 Python 开发技巧等。
第三个文档 :Python 中文指南 1.0 文档
花了三个月工夫写的一本 适宜零根底入门 Python 的全中文教程,搭配大量的代码案例,让初学者对 代码的运作成果有一个直观感触,教程既有深度又有广度,每篇文章都会标内容的难度,是根底还是进阶的,可供读者进行抉择,是一本难得的 Python 中文电子教程。