【Python 课堂】第62课—— 调试程序

    作者:在线学习平台更新于: 2014-10-16 11:04:17

    大神带你学编程,欢迎选课

    写代码,不可避免地会出现bug。很多人在初学编程的时候,当写完程序运行时,发现结果与自己预料中的不同,或者程序意外中止了,就一时没了想法,不知道该从何下手,只能反复重新运行程序,期待忽然有次结果就对了。
     
    今天我就来讲讲代码遇到问题时的一些简单处理方法。
     
    1. 读错误信息
    来看如下一个例程:
    import random
    a = 0
    for i in range(5):
        b = random.choice(range(5))
        a += i / b
    print a
     
    这个程序中,i从0循环到4,每次循环中,b是0到4中的一个随机数。把i/b的结果累加到a上,最后输出结果。
     
    运行这段程序,有时候会输出结果,有时候却跳出错误信息:
    Traceback (most recent call last):
      File "C:\Users\Crossin\Desktop\py\test.py", line 6, in
        a += i / b
    ZeroDivisionError: integer division or modulo by zero
     
    有些同学看见一段英文提示就慌了。其实没那么复杂,Python的错误提示做得还是很标准的。
     
    它告诉我们错误发生在test.py文件中的第6行
    a += i / b
    这一句上。
     
    这个错误是“ZeroDivisionError”,也就是除零错。
     
    “integer division or modulo by zero”,整数被0除或者被0模(取余数)。
     
    因为0不能作为除数,所以当b随机到0的时候,就会引发这个错误。
     
    知道了原因,就可以顺利地解决掉这个bug。
     
    以后在写代码的时候,如果遇到了错误,先别急着去改代码。技能培训试着去读一读错误提示,看看里面都说了些啥。
     
    2. 输出调试信息
    我们在所有课程的最开始就教了输出函数“print”。它是编程中最简单的调试手段。有的时候,仅从错误提示仍然无法判断出程序错误的原因,或者没有发生错误,但程序的结果就是不对。这种情况下,通过输出程序过程中的一些状态,可以帮助分析程序。
     
    把前面那个程序改造一下,加入一些与程序功能无关的输出语句:
    import random
    a = 0
    for i in range(5):
        print 'i: %d' % i 
        b = random.choice(range(5))
        print 'b: %d' % b
        a += i / b
        print 'a: %d' % a
        print
    print a
     
    运行后的输出结果(每次结果都会不一样):
    i: 0
    b: 3
    a: 0
     
    i: 1
    b: 3
    a: 0
     
    i: 2
    b: 3
    a: 0
     
    i: 3
    b: 0
    Traceback (most recent call last):
      File "C:\Users\Crossin\Desktop\py\test.py", line 8, in
        a += i / b
    ZeroDivisionError: integer division or modulo by zero
     
    当b的值为0时,发生了除零错。这次可以更清晰地看出程序出错时的状态。
     
    在真实开发中,程序的结构可能会非常复杂。通过输出调试信息,可以有效地缩小范围、定位错误发生的位置在线学习,确认错误发生时的场景,进而找出错误原因。
     
    文章来源于Crossin,由课课家平台整理,转载请注明。

课课家教育

未登录

1