目录
(3)示例3(下图是部分代码节选图,不存在if-else格式错误)
一、bug的由来及分类
所谓"(Bug)",是指电脑系统的硬件、系统软件(如操作系统)或应用软件(如文字处理软件)出错。硬件的出错有两个原因,一是设计错误,一是硬件部件老化失效等。
二、bug常见类型
1、粗心的语法错误
(1)示例1
错误1:
上图的第一个错误在于,input输入的是str型,在if里面不能用str型去和int型比较,简言之就是比较对象的类型不同。
错误提示:
TypeError: '>=' not supported between instances of 'str' and 'int'
解决方法:
把age转为int型即可。
错误2:
If后面少了冒号。
错误提示:SyntaxError: invalid syntax
解决方法:加上即可
(2)示例2
错误1:
括号用成中文的了
错误提示:SyntaxError: invalid character '(' (U+FF08)
解决方法:换成英文的即可
错误2:
变量没有提前定义
错误提示:NameError: name 'i' is not defined
解决方法:在带有i的第一个指令之前初始化i即可
错误3:
没有给循环限制结束的条件。
错误症状:无限地输出
解决方法:加个限制条件即可
(3)示例3(下图是部分代码节选图,不存在if-else格式错误)
错误:
错把比较运算符==写成了赋值运算符。
错误提示:SyntaxError: invalid syntax
解决方法:换成==即可
其它类似错误的解决方法可以参照下图:
2、知识点不熟练导致的错误
(1)示例1
错误:索引越界了
错误提示:IndexError: list index out of range
解决方法:把print后面的[4]改为[0,3]之间的元素即可。
(2)示例2
错误1:append函数的使用不熟练1:格式问题。
错误提示:NameError: name 'append' is not defined
解决方法:列表使用append需要采用lst.append()的格式去调用append函数。
错误2:append函数的使用不熟练2:append函数只能进行添加一个元素的操作。
错误提示:TypeError: list.append() takes exactly one argument (3 given)
解决方法:连用三次append函数即可
由于知识点不熟练产生的错误有一个共性的解决方法,那就是:
3、思路不清晰导致的错误
示例:
题目要求:使用列表存储电影信息,要求输入名字在屏幕上显示。。。出演了哪部电影。
错误:思路混乱
错误提示:TypeError: string indices must be integers
思路分析:
为了验证错误处到底获取了一个什么东西,这里有个小技巧,那就是会使用print函数,加在错误处的后面,以验证错误处是否获取到了东西且获取到的东西是否正确。
添加完print后会发现仍然会 出现这个错误,这就说明在第32行之前就已经发生错误了,这就导致程序根本没有走到33行的print处。
于是考虑在前面加print函数。把print函数加在了两个for后面,目的就是为了看看输出是否是我们预期的东西。下面我们来研究一下这两for的作用,第一个for是遍历这个列表lst因此我们在第一个for里得到的每一个items都是一个字典;第二个for是遍历每个items,因此第二个for里面的movie得到的是每一个字典的键。因此第33行的print才能输出三个字典的键。
这样看来第33行之前的程序是正确的,那么按照题意,我们试着去实现“输入名字在屏幕上显示。。。出演了哪部电影”这个功能吧。
先用print函数验证一下第一个for是否是我们想要的,结果表明,32行的print函数输出了每个字典中演员的列表。
那么有了演员的列表那就好说了,我们直接遍历演员列表,然后判断输入的演员值是否能与列表中的某个元素对应上,如果对应上了就输出这个字典里的title即可。
实验完毕。
解决方法:
(1)使用print函数去测试每一小段代码是否符合期望。
(2)使用“#”暂时注释部分代码。
4、被动掉坑导致的错误
示例:
题目要求:输入两个整数并进行除法运算
错误1:程序代码没有错误,只是因为用户错误操作或者一些‘例外情况’而导致的程序崩溃。
错误提示:ValueError: invalid literal for int() with base 10: 'q'
错误分析:上面的错误表明输入的数据类型是非法的,因为我们本身要做除法,结果你输入了一个字母,电脑懵逼了。。。
错误2:程序代码没有错误,只是因为用户错误操作或者一些‘例外情况’而导致的程序崩溃。
错误提示:ZeroDivisionError: division by zero
错误分析:这个也是人们输入的错误导致的电脑懵逼,被除数不应该是0,这个也符合数学规律。
此类问题解决方法:可以使用Python的异常处理机制,可以在异常出现时即行捕获,然后内部消化,让程序继续运行。