python笔记:错误、调试和测试-调试

一、用print()  
二、用断言(assert)  

三、用logging

 
四、pdb  
五、pdb.set_trace()  

一、用print()

1.1 步骤:

1.1.1 保存文件为debugtest.py,注意中间加入了print()


1.1.2在命令提示符下运行,可以看到打印的变量值


1.2 缺点:需要返回进行删除print()

二、用断言(assert)

2.1 步骤

2.1.1 debugtest.py修改如下


2.1.2运行,显示断言失败,assert语句本身就会抛出AssertionError:


2.2 优势 

与print相比,启动Python解释器时可以用 -O 参数(注意为大写O)来关闭assert:


三、logging

3.1 步骤

在debugtest.py开头添加:

import logging
logging.basicConfig(level=logging.INFO)
程序中段修改为:
logging.info('n = %d' % n)

全部修改完如下:


3.2运行


3.3 优势

3.3.1 logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。这样一来,你可以放心地输出不同级别的信息,也不用删除,最后统一控制输出哪个级别的信息。

3.3.2另一个好处是通过简单的配置,一条语句可以同时输出到不同的地方,比如console和文件。

四、pdb

 启动Python的调试器pdb,让程序以单步方式运行,可以随时查看运行状态。

4.1 步骤

4.1.1修改debugtest.py如下


4.1.2 使用  -m pdb启动


4.1.3 以参数-m pdb启动后,输入命令l来查看全部代码:


4.1.4 输入命令n,进行单步执行


4.1.5 注:可以输入命令 p 变量名查看变量,但是这个变量所在的代码必须是运行过之后才能查看,否则,会出现找不到变量的情况,如下


下图清晰反映出了,要查看变量,前提是变量所在代码必须已经执行了


4.1.6 使用命令 q 结束调试,退出程序


4.2缺点

pdb在命令行调试的方法理论上是万能的,但实在是太麻烦了,如果有一千行代码,要运行到第999行很难敲了

五、pdb.set_trace()

也是用pdb,但是不需要单步执行,我们只需要import pdb,然后,在可能出错的地方放一个pdb.set_trace(),就可以设置一个断点

5.1步骤

5.1.1 加上import pdb以及pdb.set_trace() ,修改debugtest.py如下,运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境


5.1.2 运行代码,程序会自动在pdb.set_trace()暂停并进入pdb调试环境,,可以用命令p查看变量,或者用命令c继续运行:


5.2 总结

这个方式比直接启动pdb单步调试效率要高很多,但也高不到哪去。


猜你喜欢

转载自blog.csdn.net/zyckhuntoria/article/details/80851750