首页 > Python3教程 > Python3异常与错误处理

Python3 程序调试

程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。

编完计算机程序,必须送入计算机中测试。根据测试时所发现的错误,进一步诊断,找出原因和具体的位置进行修正。

程序能一次写完总会有各种各样的bug需要修正。有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是正确的,哪些变量的值是错误的,因此,需要一整套调试程序的手段来修复bug。

使用print函数打印变量信息

用print()函数把可能有问题的变量打印出来,执行后在输出中查找打印的变量值。调试完成后,需要删除或注释print()函数。

n = int(1)
print('>>> n = %d' % n)

断言

有用print()函数来打印变量的地方,都能用断言(assert)来替代

def test(s):
n = int(s)
assert n != 0, 'n is zero!'
return 10 / n

test('0')

assert是,表达式n != 0应该是True,否则,根据程序运行的逻辑,后面的代码肯定会出错。如果断言失败,assert语句本身就会抛出AssertionError。

程序中如果到处充斥着assert也好不。不过,启动Python解释器时可以用-O参数来关闭assert。

logging

把print()替换为logging,和assert比,logging不会抛出错误,而且能输出到文件。

它允许指定记录信息的级别,有debug,info,warning,error等几个级别,当我们指定level=INFO时,logging.debug就不起作用了。同理,指定level=WARNING后,debug和info就不起作用了。

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

import logging
logging.basicConfig(level=logging.INFO)

s = '0'
n = int(s)
logging.info('n = %d' % n)
print(10 / n)

pdb

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

以参数 -m pdb 执行python文件后,pdb定位到下一步要执行的代码

输入命令 来查看代码,输入命令 单步执行代码,输入命令 p 变量名 来查看变量,输入命令 结束调试,退出程序

pdb.set_trace()

这个方法也是用pdb,但是不需要单步执行,只需要import pdb,在可能出错的地方放一个pdb.set_trace(),设置一个断点。

import pdb

s = '0'
n = int(s)
pdb.set_trace() # 运行到这里会自动暂停
print(10 / n)

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

集成开发环境IDE

设置断点、单步执行,需要一个支持调试功能的IDE。目前比较好的Python IDE有:

Visual Studio Code:https://code.visualstudio.com/,需要安装Python插件。

PyCharm:http://www.jetbrains.com/pycharm/

另外,Eclipse加上pydev插件也可以调试Python程序。

 

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。