简介
这一篇文章主要介绍一些 Python 的两个调试方法,使用 pdb(或是 ipdb)和 logging 这两种方式进行调试。关于 logging 模块更加详细的使用,可以参考链接,Python 的 logging 模块的使用。
logging
之前自己调试的时候其实经常会使用 print 来进行调试,但是最后使用的时候会打印很多信息。通常情况下,当调试完毕之后就不想打印这么多了,这个时候可以使用 logging 来进行调试。
关于详细资料可以查看这个链接(这里有非常详细的使用方式) : Python 的 logging 模块的使用
下面大致看一下如何使用 logging 模块。使用 logging 需要在最开始添加一行配置,如下所示:
- import logging
- logging.basicConfig(level=logging.INFO)
logging 允许你指定记录信息的级别,有debug
,info
,warning
,error
等几个级别。当我们指定level=INFO
时,logging.debug
就不起作用了。同理,指定level=WARNING
后,debug
和info
就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。
logging
的另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。(来自廖雪峰Python3-调试)
我们看一个例子,来大致了解一下:
- import fire
- import pdb
- import logging
- logging.basicConfig(level=logging.INFO)
- def Multiplication(x, y):
- """
- x*y
- """
- logging.info("To Calcuate %d * %d" % (x,y))
- logging.info("--- --- ---")
- z=x*y
- #pdb.set_trace()
- return(z)
- def main():
- fire.Fire(Multiplication)
- if __name__ == '__main__':
- main()
我们看一下运行的效果,这样调试信息会直接输出出来;

我们也可以将logging输出到文件中,只需要修改第一行的配置;
- logging.basicConfig(filename='logger.log',level=logging.INFO)

使用 pdb 进行调试
pdb 是 python 自带的一种调试方式。这种方法可以设置断点,进行单步调试,查看栈内变量。我们还是使用上面的代码,进行运行,下面展示一些常用的操作:

关于其他的操作步骤.
- (Pdb)n #单步运行
- (Pdb)s #细点运行 也就是会下到,方法
- (Pdb)c #跳到下个断点
pdb命令合集

使用 ipdb 进行调试
ipdb 可以看作是上面 pdb 的升级版,需要进行安装。使用pip install ipdb
即可轻松安装。在使用的时候,有两种方式,分别是「集成到源代码中」和「命令式」,我们分别来看例子。
ipdb 使用方式--集成到源代码中
我们可以在代码指定的位置插入断点,从而进行调试。下面我们看一个例子。
- def add_x_y(x, y):
- import ipdb; ipdb.set_trace() # 打断点
- return x+y
- if __name__ == "__main__":
- x1 = 1
- y1 = 2
- result = add_x_y(x1, y1)
我们运行这个代码,程序会在进入函数 add_x_y
后停止,展开 Ipython
环境,就可以自由地调试了。例如我们可以通过 a
查看输入函数的所有参数:

ipdb 使用方式--命令式
除了上面的方式外,我们还可以使用以下的命令按步执行,边运行边跟踪代码进行调试。下面的方法可以启动 ipdb 的调试环境:
- python -m ipdb your_code.py
首先我们通过上面的命令进入 ipdb 的调试环境:

接着我们可以通过一些常见的命令进行调试。下面是一些常见的命令:
h
,调出 ipdb 的帮助文档;b
,打断点,使用b line_number(break)
的方式给指定的行号位置加上断点。使用b file_name:line_number
的方法给指定的文件(还没执行到的代码可能在外部文件中)中指定行号位置打上断点;n(next)
,执行下一个语句(不会进入函数内部);s(step into)
,进入函数内部进行调试;c(continue)
,执行代码,直到遇到下一个断点;w(where)
,查看自己在哪里;q
,退出调试;
- 微信公众号
- 关注微信公众号
-
- QQ群
- 我们的QQ群号
-
评论