例1:
#Debug前的代码
a = input('请输入密码:')
if a == '123456'
print('通过')
# 运行之后,仔细看报错,通过理解报错信息,可快速定位错误的根源
# 本例题中有3个关键信息:
#(1)line 2代表这个bug出现在第2行,所以,我们在Debug的时候,可以优先从第2行开始检查。
#(2)^代表bug发生的位置,这里指出的位置是第二行末尾。
#(3)这一行写的是错误类型,SyntaxError指的是语法错误。
# 若运行后看不懂报错信息,找度娘就基本知道是哪种类型的错误。
# Debug后的代码
a = input('请输入密码:')
if a == '123456':
print('通过')
第二种bug:由于知识不够熟练而引起的错误。这种错误给我们的启示是:当你发现知识点记不清或者不能确定的时候,就要及时复习或者上网搜索。不要强行写出自己不敢确定的代码,这种情况往往容易出错。
例2:
# Debug之前
a = []
a.append ('A','B','C')
print(a)
# 问题分析:
# 查找append()函数的相关知识,发现并没有a=append('A','B','C') 这种用法。
# append()函数是列表的一个方法,要用句点.调用,且append()每次只能接受一个参数
# Debug之后
a = []
a.append('A')
a.append('B')
a.append('C')
print(a)
思路不清指的是当我们解决比较复杂的问题时,由于我们对细节和实现手段思考得不够清楚,要么导致一步错,步步错;要么虽然没有报错,但是程序没有达到我们想要的效果。
(1)print()函数
主要用于检验对错:遇到关键步骤时print出来,看是否达到我们所期望的结果,以此来揪出错误的那一步。
(2)#号
当你写的代码总是不对,又弄不明白哪里不对的时候,使用#号把后面的代码注释掉,一步一步运行,可以帮助排除错误。
例3:
Debug之前程序没有报错,但是没有实现想要的效果。例题要求如下图:
# Debug之前
movie = {
'妖猫传':['黄轩','染谷将太'],
'无问西东':['章子怡','王力宏','祖峰'],
'超时空同居':['雷佳音','佟丽娅']
}
name=input('你查询的演员是?')
for i in movie:
actors=[i]
if name in actors:
print(name+'出演了'+i)
# 问题分析:
# 看第10行:想要用for循环遍历这个字典。第11行:试图取出字典中的值。
# (对字典用法熟悉的人可以看出,这不符合语法规范)
#使用print和#号排查错误:
movie = {
'妖猫传':['黄轩','染谷将太'],
'无问西东':['章子怡','王力宏','祖峰'],
'超时空同居':['雷佳音','佟丽娅']
}
name=input('你查询的演员是?')
for i in movie:
actors=[i]
print(actors) #使用print() 函数查看操作是否正确。
#if name in actors:
#print(name+'出演了'+i)
#Debug之后
movie = {
'妖猫传':['黄轩','染谷将太'],
'无问西东':['章子怡','王力宏','祖峰'],
'超时空同居':['雷佳音','佟丽娅'],
}
name = input('你想查询哪个演员?')
for i in movie:
actors = movie[i]
#取出字典的值
if name in actors:
print(name+'出演了电影'+i)
被动掉坑,是指有时候你的代码逻辑上并没有错,但可能因为用户的错误操作或者是一些“例外情况”而导致程序崩溃。
为了不让一些无关痛痒的小错影响程序的后续执行,Python给我们提供了一种异常处理的机制,可以在异常出现时即时捕获,然后内部消化掉,让程序继续运行。就是try...except...语句。具体用法:
例4:
print('\n欢迎使用除法计算器!\n')
while True:
try:
x = input('请你输入被除数:')
y = input('请你输入除数:')
z = float(x)/float(y)
print(x,'/',y,'=',z)
break # 默认每次只计算一次,所以在这里写了 break。
except ZeroDivisionError: # 当除数为0时,跳出提示,重新输入。
print('0是不能做除数的!')
except ValueError: # 当除数或被除数中有一个无法转换成浮点数时,跳出提示,重新输入。
print('除数和被除数都应该是整值或浮点数!')
# 方式2:将两个(或多个)异常放在一起,只要触发其中一个,就执行所包含的代码。
# except(ZeroDivisionError,ValueError):
# print('你的输入有误,请重新输入!')
# 方式3:常规错误的基类,假设不想提供很精细的提示,可以用这个语句响应常规错误。
# except Exception:
# print('你的输入有误,请重新输入!')