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