bug起源

世界上第一部万用计算机的进化版——马克2号(Mark II)

为它编写程序的葛丽丝·霍波是一位美国海军准将及计算机科学家。有一天,她正在调试程序,结果老是出现故障。

层层排查后,她拆开了继电器,结果发现有只飞蛾被压扁在出点中间,从而‘卡’出了机器的运行。于是,霍波诙谐的把程序故障统称为“臭虫(bug)”。

从此,BUG就化身计算机领域里程序故障的代名词,而把派出故障程序叫做debug。

出bug常见四种类型

粗心:由粗心导致的错误代码

错误示例

a = input('请输入密码:')

if a == '123456':

print('通过')

输出结果

line 2

if a == '123456'

^

SyntaxError: invalid syntax

在报错中查看关键信息:

a.line2代表这个bug出现在第2行,所以,在debug的时候,可以优先从第2行开始检查。

b.^代表bug发生的位置,这里指出的位置是第二行末尾。

c.最后一行写的是错误类型,SyntaxError指的是语法错误。

刚开始对错误类型的英文不熟悉,可以直接复制到百度搜索

通过这些提示,就可以发现,这段代码的问题是少了一个英文冒号

测试题

while n < 3:

username = input('请输入用户名:')

password = input('请输入密码:')

if username = 'abc' and password = '123':

print('登录成功')

break

else

n = n + 1

print('输入有误')

else:

print('你输错了三次,登录失败')

注:测试题中共有6处错

识不熟练:由于知识不够数练而引起的错误

错误示例

week = ['星期一','星期二','星期三','星期四','星期五','星期六','星期日']

sunday = week[7]

print(sunday)

输出结果

line 2, in

sunday = week[7]

IndexError: list index out of range

注:列表的索引是从0而不是从1开始的

错误示例

a = []

a.append('a','b','c')

输出结果

line 2, in

a.append('a','b','c')

TypeError: append() takes exactly one argument (3 given)

注:append()每次只能接收一个参数

当发现知识点记不清或者不能确定的时候,就要及时复习或者上网搜索

思路不清:解决比较复杂的问题,程序没有达到想要的效果

解决办法

注:#号注释,计算机不会执行代码中的#号和其之后的内容

练习题目

错误实例

movie = {

'妖猫传':['黄轩','染谷将太'],

'无问西东':['章子怡','王力宏','祖峰'],

'超时空同居':['雷佳音','佟丽娅']

}

name = input('你查询的演员是?')

for i in movie:

actors = [i]

if name in actors:

print(name + '出演了' + i)

注:运行后没有报错,但是没有实现题目的要求

通过 print() 和 # 排查问题

movie = {

'妖猫传':['黄轩','染谷将太'],

'无问西东':['章子怡','王力宏','祖峰'],

'超时空同居':['雷佳音','佟丽娅']

}

name = input('你查询的演员是?')

for i in movie:

actors = [i]

print(actors) # 使用print()函数查看操作是否正确。

# if name in actors:

# print(name + '出演了' + i)

运行结果

你查询的演员是?王力宏

['妖猫传']

['无问西东']

['超时空同居']

可以发现,这样写取到的全部是字典的键,而我们要取得是字典的值

被动掉坑:代码逻辑上没有错,但可能因为用户得错误操作或者是一些“例外情况”而导致程序崩溃

错误实例

age = int(input('你今年几岁了?'))

if age < 18:

print('不可以喝酒哦')

注:如果输入的不是数字,程序一定会报错

为了不让一些小错误影响程序的后续执行,可以用try...except...语句

当我们输入不是整数时,报错类型是'ValueError'

try:

age = int(input('请输入一个整数:')

except ValueError:

print('要输入整数哦')

输出结果

请输入一个整数:abc

要输入整数哦

错误实例

num = [1, 2, 0, 3]

for x in num:

print(6/x)

输出结果

6.0

3.0

Traceback (most recent call last):

File "c:/Users/MACHENIKE/Desktop/python/test/csdn_test.py", line 3, in

print(6/x)

ZeroDivisionError: division by zero

注:0是不可以做除数的,所以导致后面的循环无法执行

通过try...except...修改后的示例

num = [1,2,0,3]

for x in num:

try:

# 尝试执行下列代码

print(6/x)

# 使用6除以num中的元素,并打印

except ZeroDivisionError:

# 除非发生ZeroDivisionError报错,执行下列代码:

print('0是不能做除数的!')

# 打印“0是不能做除数的!”

输出结果

6.0

3.0

0是不能做除数的!

2.0