第二章  第9节 雍正专治bug

江湖秘籍:bug是程序错误的统称。

四种常见Bug类型

1、粗心

pwd = input('请输入密码:')
if pwd == '520666'
     print('正确')

如果你观察仔细, 你会一眼发现,这段代码少了一个”冒号”。

仔细观察报错信息: 我们可以得到三个有效关键词:

1、line2 第二行。

2、^在pwd ==’520666’后面,也就是第二行末尾。

3、SyntaxError表示语法错误, 就是语法不规范。

for i in range(1,10):
print(i)
for i in range(1,10):
	print(i)

这是代码修改后的对比,Python江湖中,将整治bug称为debug。

2、知识不熟练

list = ['刘备','关羽','张飞','赵云']
print(list[4])
list = ['刘备','关羽','张飞','赵云']
list.del(list[3])
print(list)

问题就出在第二行, 翻看原来笔记。del()函数,直接将删除数据放在括号中就可以,前面不需要写”list.”

list = ['刘备','关羽','张飞','赵云']
del (list[3])
print(list)

3、思路不清

film = {
    '速度与激情':['强森','斯坦森'],
    '烈火英雄':['黄晓明','杜江','杨紫'],
    '深夜食堂':['梁家辉','刘涛'],
    '铤而走险':['大鹏','李梦','欧豪'],
    '使徒行者':['张家辉','古天乐']
}

star =input('你想看哪位演员的电影?')
for i in film:
    actors=[i]
    if star in actors:
        print(star+'出演影片'+i)

我将film后面的代码注释,再打印一下film的数据内容, 正常打印。这就说明film这个字典没有问题。那我们就查找后面代码。

film = {
    '速度与激情':['强森','斯坦森'],
    '烈火英雄':['黄晓明','杜江','杨紫'],
    '深夜食堂':['梁家辉','刘涛'],
    '铤而走险':['大鹏','李梦','欧豪'],
    '使徒行者':['张家辉','古天乐']
}
print(film)
# star =input('你想看哪位演员的电影?')
# for i in film:
#     actors=[i]
#     if star in actors:
#         print(star+'出演影片'+i)

这一次,我们看一下star=input(‘你想看哪位演员的电影?’)这条语句; 同样,我们将后面代码注释, 打印star内容。

film = {
    '速度与激情':['强森','斯坦森'],
    '烈火英雄':['黄晓明','杜江','杨紫'],
    '深夜食堂':['梁家辉','刘涛'],
    '铤而走险':['大鹏','李梦','欧豪'],
    '使徒行者':['张家辉','古天乐']
}

star =input('你想看哪位演员的电影?')
print(star)
# for i in film:
#     actors=[i]
#     if star in actors:
#         print(star+'出演影片'+i)

上面两部分都没有问题, 那就来检查第三部分,for循环内容。 其实, 老司机一眼就能看出for循环内部出了问题。

for i in film:这行代码写的很规范,也没有掉冒号:那就继续往下。

actors=[i]这里是赋值, 怎么把i赋值给了变量actors.我们打印一下它, 看看输出什么?

film = {
    '速度与激情':['强森','斯坦森'],
    '烈火英雄':['黄晓明','杜江','杨紫'],
    '深夜食堂':['梁家辉','刘涛'],
    '铤而走险':['大鹏','李梦','欧豪'],
    '使徒行者':['张家辉','古天乐']
}

star =input('你想看哪位演员的电影?')
print(star)
for i in film:
    actors=[i]
    print(actors)
#     if star in actors:
#         print(star+'出演影片'+i)

怎么都是电影名啊?打印的是字典的键。我不想要字典的键,我想要字典的值。

film = {
    '速度与激情':['强森','斯坦森'],
    '烈火英雄':['黄晓明','杜江','杨紫'],
    '深夜食堂':['梁家辉','刘涛'],
    '铤而走险':['大鹏','李梦','欧豪'],
    '使徒行者':['张家辉','古天乐']
}

star =input('你想看哪位演员的电影?')
print(star)
for i in film:
    actors=film[i]
    print(actors)
#     if star in actors:
#         print(star+'出演影片'+i)
film = {
    '速度与激情':['强森','斯坦森'],
    '烈火英雄':['黄晓明','杜江','杨紫'],
    '深夜食堂':['梁家辉','刘涛'],
    '铤而走险':['大鹏','李梦','欧豪'],
    '使徒行者':['张家辉','古天乐']
}

star =input('你想看哪位演员的电影?')
for i in film:
    actors=film[i]
    if star in actors:
        print(star+'出演影片'+i)

4、被动掉坑

被动掉坑,指的是有时候代码没问题, 而是用户操作不正确,导致程序出问题。

age = int(input('你今年多大了?'))
if age < 18:
    print('不可以抽烟喝酒烫头哦')

For example:运行一下下面代码, 你输入字符串,看看程序报不报错?再重新运行一次,输入整数试一试。

在Python江湖中,Python给我们提供了一种异常处理机制,用来内部消化出现的异常,让程序继续执行。

while True:
        try:
            age = int(input('你今年多大了?'))
            break
        except ValueError:
            print('你输入的不是数字')
if age < 18:
    print('不可以抽烟喝酒烫头哦')

这段代码: 1、不知道用户什么时候会输入正确,什么时候会输入错误, 设置while循环来接收输入, 只要用户输入的不是数字就一直循环,用户输入数字后就break跳出循环。

2、 使用try…except…异常捕获机制, 用户输入不正确时会一直提示。

课后练习

1. 运行以下代码会报错;list是一个空列表,我们要把’X’,’Y’,’Z’加入到列表中,将list变成 list=[‘X’,’Y’,’Z’]

list = []
list.append ('X','Y','Z')
print(list)

2. 代码如下: num = [5,6,0,10] for i in num: print (600/i) 。 运行以下代码,终端会报错,找到代码错误地方,进行修改

num = [5,6,0,10]
for i in num:
    print (600/i)

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注