四时宝库

程序员的知识宝库

第48讲 程序调试(和猫妹学Python)

小朋友们好,大朋友们好!

我们今天学习程序调试,要学习的内容如下:

什么是程序调试

使用IDLE进行程序调试

使用assert语句进行调试

什么是程序调试

我们先看个故事,斯坦门茨画一条线价值一万美元的故事。

20世纪初,美国福特公司正处于高速发展期,一个个车间一片片厂房迅速建成并投入使用,客户的订单快把公司的办公室塞满了,生产的汽车供不应求,突然公司一台电机出了毛病。几乎整个车间都不能运转。

相关的生产工作也被迫停产。公司调来大批检修,工人反复检修,又请了很多专家查看,可怎么也找不到问题出在哪儿,更谈不上维修。

后来请来著名物理学家、电机专家斯坦门次。他来后,绕着电机绕了一圈儿,然后用粉笔在电机外壳画了一条线,让工作人员打开电机,在记号处把里面的线圈减少16圈儿。

人们照办,故障排除,生产立刻恢复。

他要酬金1万美元。当时福特公司员工月薪五美元,这在当时也是高薪。

一条线1万美元!是一个普通工人100多年的收入。

斯坦门茨看大家迷惑不解,就开了清单:画一条线,一美元;知道在哪儿画线,9999美元。

如何知道问题在哪儿?就是调试。

程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。

这是保证计算机信息系统正确性的必不可少的步骤。

编完计算机程序,必须送入计算机中测试。

根据测试时所发现的错误,进一步诊断,找出原因和具体的位置进行修正。

有程序就有bug,程序调试就是尽可能多地发现代码中的bug。

Python的IDLE有调试功能,了解下即可,用得不多。

在大型项目中,一般有更高效的开发和调试集成开发环境。


使用IDLE进行程序调试

  1. 在IDLE Shell主菜单上选择Debug->Debugger,此时IDLE Shell上显示[DEBUG ON]表示已经处于调试状态,并打开了Debug Control面板。
  2. 在IDLE Shell主菜单上选择Open打开一个py后缀文件。
  3. 在打开的py文件上,要添加断点的地方,点击右键选择Set breakpoint,表示添加断点。如选择Clear breakpoint表示移除断点。
  4. 在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

好了,今天的学习就到这里!

我们下次见!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接