Python自学20——第十章(1):bug的由来及分类,bug的常见类型(bug赏析)

目录

一、bug的由来及分类

二、bug常见类型

1、粗心的语法错误

(1)示例1

(2)示例2

(3)示例3(下图是部分代码节选图,不存在if-else格式错误)

2、知识点不熟练导致的错误

(1)示例1

(2)示例2

3、思路不清晰导致的错误

4、被动掉坑导致的错误


一、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的异常处理机制,可以在异常出现时即行捕获,然后内部消化,让程序继续运行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wo~he!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值