小朋友们好,大朋友们好!
我们今天学习程序调试,要学习的内容如下:
什么是程序调试
使用IDLE进行程序调试
使用assert语句进行调试
什么是程序调试
我们先看个故事,斯坦门茨画一条线价值一万美元的故事。
20世纪初,美国福特公司正处于高速发展期,一个个车间一片片厂房迅速建成并投入使用,客户的订单快把公司的办公室塞满了,生产的汽车供不应求,突然公司一台电机出了毛病。几乎整个车间都不能运转。
相关的生产工作也被迫停产。公司调来大批检修,工人反复检修,又请了很多专家查看,可怎么也找不到问题出在哪儿,更谈不上维修。
后来请来著名物理学家、电机专家斯坦门次。他来后,绕着电机绕了一圈儿,然后用粉笔在电机外壳画了一条线,让工作人员打开电机,在记号处把里面的线圈减少16圈儿。
人们照办,故障排除,生产立刻恢复。
他要酬金1万美元。当时福特公司员工月薪五美元,这在当时也是高薪。
一条线1万美元!是一个普通工人100多年的收入。
斯坦门茨看大家迷惑不解,就开了清单:画一条线,一美元;知道在哪儿画线,9999美元。
如何知道问题在哪儿?就是调试。
程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。
这是保证计算机信息系统正确性的必不可少的步骤。
编完计算机程序,必须送入计算机中测试。
根据测试时所发现的错误,进一步诊断,找出原因和具体的位置进行修正。
有程序就有bug,程序调试就是尽可能多地发现代码中的bug。
Python的IDLE有调试功能,了解下即可,用得不多。
在大型项目中,一般有更高效的开发和调试集成开发环境。
使用IDLE进行程序调试
- 在IDLE Shell主菜单上选择Debug->Debugger,此时IDLE Shell上显示[DEBUG ON]表示已经处于调试状态,并打开了Debug Control面板。
- 在IDLE Shell主菜单上选择Open打开一个py后缀文件。
- 在打开的py文件上,要添加断点的地方,点击右键选择Set breakpoint,表示添加断点。如选择Clear breakpoint表示移除断点。
- 在IDLE Shell上选择运行,程序运行后,可以点击Debug Control面板的各种按钮。
Go按钮:点击Go按钮将导致程序正常执行至终止,或到达一个断点
Step按钮:点击Step将导致调试器执行下一行代码,然后再次暂停(会步入函数,相当于VS的F11单步执行)
Over按钮:与Step类似,但是如果下一行代码是函数调用,Over将会跳过该函数代码(相当于VS的F10,过程执行)
Out按钮:点击Out按钮将导致调试器全速执行代码行,直到他从当前函数返回(与Step相辅相成,Step进去想快点出来就Out)
Quit按钮:点击Quit按钮将马上终止该程序
使用assert语句进行调试
assert语句中文意思是断言,一般用于对程序某个时刻必须满足的条件进行验证。
语法如下:
assert expression [,reason]
expression:条件表达式,如果表达式为真,什么都不做。如果为假,将抛出AssertionError异常。
reason:可选参数,用于对判断条件进行描述,为了以后更好地知道哪里出现了问题。
猫妹的测试代码见48.3.1.py
#要求被除数大于等于除数
def div():
a=int(input('请输入一个整数:'))
b=int(input('请输入另一个整数:'))
assert a >= b,'被除数小于除数啦'
c=a/b
print('两数的商是:',c)
if __name__ == '__main__':
div()
assert语句常和异常处理语句结合使用,猫妹的测试代码见48.3.2.py
#要求被除数大于等于除数
def div():
a=int(input('请输入一个整数:'))
b=int(input('请输入另一个整数:'))
assert a >= b,'被除数小于除数啦'
c=a/b
print('两数的商是:',c)
if __name__ == '__main__':
try:
div()
except AssertionError as e:
print("输入错误:",e)
assert语句只在调试阶段有效,可以通过-O关闭assert语句。
可以对比下
python 48.3.2.py
python -O 48.3.2.py
好了,今天的学习就到这里!
我们下次见!