python如何调试:靠原生工具逐行定位代码报错问题

python如何调试:靠原生工具逐行定位代码报错问题

之前写爬虫批量爬取图文数据时,卡了整整一下午,才真正摸懂python如何调试不是靠瞎print堆砌,而是精准揪出代码隐性bug。

这是最蠢的新手调试方式。

当时写的是requests请求加正则匹配的爬虫逻辑,外层循环遍历页面链接,内层解析文本和图片地址,整体代码没有红色报错,控制台干干净净,就是最终导出的excel表格里没有任何有效数据,反复运行十几次结果都一样。一度怀疑是网络请求被拦截,还特意换了代理、加了完整请求头、设置了随机延迟等待,折腾了两个多小时,完全没摸到问题的根源,只知道程序跑通了但核心功能完全失效,所有的修改操作都做了无用功。

全程只会在代码各个位置插入print语句,打印变量、打印循环次数,密密麻麻插了十几行打印代码,页面输出的信息杂乱无比,根本分辨不出哪些数据是有效、哪些是冗余的,越排查越混乱,最后索性全部删掉,重新运行还是一模一样的问题。

后来才反应过来,Python自带的调试功能完全被闲置了,新手最容易犯的错,就是固执依赖低级的打印调试,放着精准的原生工具不用。

打开编辑器的调试面板,在数据解析的核心代码行打上断点,开启调试模式。

逐行运行代码的瞬间,立马锁定了所有问题。循环遍历链接的时候,部分失效页面返回的响应状态码是404,但代码里没有设置异常捕获,程序默默跳过失效链接,不会弹出任何报错提示。除此之外,正则匹配的符号少加了一个转义字符,导致所有文本内容匹配失败,两个细微漏洞叠加,才造成了程序正常运行、但无任何输出的诡异情况。之前的print只打印了外层循环参数,压根没触及内层解析逻辑,自然永远查不出根源。

断点调试的优势就在这。

可以实时查看每一步的变量数值、参数状态、匹配结果,不用靠主观猜测拼凑问题,哪一行代码执行异常、哪个变量数值出错,都能直观看到,排查效率比盲目打印快十倍不止。简单跳过无效代码、修正正则符号、补上异常捕获语句后,代码一次性运行成功,所有数据正常导出。

那天傍晚清空了所有多余的打印代码,跑完批量数据,关掉调试面板的时候,屏幕上还停着最后一行解析成功的变量数据。

了解更多百科知识请访问 百科