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定位到下一步要执行的代码
输入命令 l 来查看代码,输入命令 n 单步执行代码,输入命令 p 变量名 来查看变量,输入命令 q 结束调试,退出程序
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调试环境,用命令 p 查看变量,或者用命令 c 继续运行:
集成开发环境IDE
设置断点、单步执行,需要一个支持调试功能的IDE。目前比较好的Python IDE有:
Visual Studio Code:https://code.visualstudio.com/,需要安装Python插件。
PyCharm:http://www.jetbrains.com/pycharm/
另外,Eclipse加上pydev插件也可以调试Python程序。

相关推荐
深度学习 -- 损失函数
深度残差网络(Deep Residual Networks (ResNets))
深度学习 -- 激活函数
神经网络训练 -- 调整学习速率
生成对抗网络(GAN)改进与发展
生成对抗网络(GAN)优点与缺点
生成对抗网络(GAN)的训练
生成对抗网络(GAN)基本原理
生成模型与判别模型