Python 程序如何高效地调试?

看LZ的意思是想了解出现BUG怎么调试的问题。BUG有2种:

第一种

。楼上已经讲了IPython,是的。首先我先写一个有问题的例子:

执行肯定是报错的:

有点经验的人一眼看去就知道 是因为分母是0造成的。可是脚本执行结束了,要是调试还得不断的在对应位置加print。绝招就是:

程序运行在错误的地方,嘎.. 停住了,保存了错误上下文,进入pdb环境,直接调试去吧,不要太开心。

说到这里,ipdb(pdb)可以设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。它有很多快捷键:

其中up,down,n,j,l,where,s, args等我都非常常用,我非常建议你每个快捷键都了解一下。当然很懒的话,你们也有福利,看

第二种:

,也就是并没有报错,但是输出不符合预期,这种的比较烦,因为如果你经验少写的时候又不咋专心的话,基本上就得挨个地方去确认,有人说,「import pdb pdb.set_trace() 」,嗯很标准的方案,但是我一般不用。原因是什么呢,比如调试Web应用,如果set_trace()的话,需要点多个next才能到你想调试的地方,手指头都点木了。。所以我一般使用如下三个方法:

  1. 抛异常。直接让你想要调试的位置让它先跑个异常,比如Flask的DEBUG的模式下,werkzeug里面的DebuggedApplication就会把Web页面渲染成一个可调试和可执行的环境,直接到上面调试:

2.

这是最基础的玩法。我一般只会在已经心理有数,只是需要看看日志输出来确认的时候加临时的。平时的应用日志也会有常规的记录,并且会记录堆栈(当然,使用sentry之类的方式搜集日志是最好的),比如重要的上线过程中,出了问题但是开发环境又不好模拟出来的时候,「tail -f」日志文件们,这样出现问题一看就看到了。 说到这里再推荐一个很有意思的项目:

,它是在我看pycon2013演讲中发现的,有兴趣可以看看,

。我之前常用它。

3.

我会收集一些在我的工作中常用的有用的函数和方法,并将它们放在库中。获取调用堆栈的函数之一如下所示:

[En]

I will collect some useful functions and methods that are commonly used in my work and put them in a library. One of the functions that gets the call stack looks like this:

您可以通过查看当前上下文中调用堆栈的输出来帮助您找到隐藏的错误。

[En]

You can help you find the hidden bug by looking at the output of the call stack in the current context.

Original: https://www.cnblogs.com/zhizhan/p/6009573.html
Author: 止战
Title: Python 程序如何高效地调试?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/10009/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总