
调试代码的时候,你是不是也经常用print?反正我以前是。遇到变量不对劲,就噼里啪啦加一堆print,运行看输出,再删掉,再改,再运行。这个过程重复多了,真的有点烦。
后来我学会了一个工具,叫pdb。它是Python自带的一个交互式调试器。刚开始我也觉得记命令很麻烦,直到有次写了个循环嵌套,变量改来改去,用print怎么都看不出问题在哪。实在没辙,我就试着用pdb跑了一下。你猜怎么着?跑到循环中间,我直接停下来,用命令看了每个变量的值,还顺手改了一个变量的值,让程序继续跑下去。那一刻感觉,以前花大把时间改print,真的有点亏。
pdb怎么用呢?其实就一句话的事。在代码里想停住的地方,加一行import pdb; pdb.set_trace()。然后正常运行程序,程序跑到这行就会停住,进入交互模式。然后就跟你用Python解释器一样,想干什么干什么。看变量直接输变量名,改变量就直接赋值。想继续跑,就输c。想一步一步走,就输n。难不难?不难。
有一次我帮同事看bug,他写了个函数,参数是个列表,函数里面改了这个列表。他搞不懂为什么外面的列表也变了。我就加了个pdb.set_trace(),跑到那一步,看到列表的id是一样的,指向同一个对象。我把这个结果告诉他,他一下就明白了。要是用print,得印好几行信息,还要自己对比内存地址,多了不少事。
最爽的一点是,你在调试的时候,可以任意修改变量的值。比如你写了一个数据处理脚本,中途发现某个变量算错了,你不用退出重跑。直接在调试器里把这个变量改成正确的值,然后继续执行。这一点,print绝对做不到。你只能退出,改代码,重新跑整个过程,前面明明都跑对了,但还得再等一遍。
我现在写代码的时候,遇到复杂的逻辑,会直接用pdb。比如写一个递归函数,用print要加好几行,输出一堆看不懂的缩进。用pdb,我就在函数开头放个断点,每次进来都停一下,看看当前参数是什么,结果是什么。走几遍就清楚了。改完代码,直接把那行代码删掉就好,不会像print那样留下很多痕迹。
有些人觉得pdb的界面不好看,不如IDE里的调试器。但对我来说,它轻量、不依赖任何IDE,不管在服务器上还是在别人电脑上,只要装了Python就能用。有一次我在远程服务器上调试一个服务,不能装IDE,也不能用图形界面。我就在代码里加了pdb.set_trace(),然后连上终端跑,照样调试。这种时候,pdb就是最好的选择。
如果你现在还在用print调试,可以试试pdb。它不需要你学很多东西,记住几个命令就行:n下一步,s进入函数,l查看当前位置的代码,p打印变量。花十分钟熟悉一下,以后调试代码的时间能省不少。
以上就是“Python调试时修改变量?这个交互式工具比print强大太多”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14425/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料