第二章 第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 条评论