Python 使用循环后返回异常
我的函数被传递一个字典(一个名字和一个分数)和一个名字。然后,它比较名称以查看其是否在字典中,如果是,则打印名称和分数Python 使用循环后返回异常,python,exception,dictionary,exception-handling,keyerror,Python,Exception,Dictionary,Exception Handling,Keyerror,我的函数被传递一个字典(一个名字和一个分数)和一个名字。然后,它比较名称以查看其是否在字典中,如果是,则打印名称和分数 def display_marks_for(adict,name): try: for key in adict: if name == key: print(name,"=",adict[key]) except KeyError: print(name,'not on list') 如果名称在字典中,我的代码会打印正
def display_marks_for(adict,name):
try:
for key in adict:
if name == key:
print(name,"=",adict[key])
except KeyError:
print(name,'not on list')
如果名称在字典中,我的代码会打印正确的内容,但是如果名称不存在,它不会打印任何内容
我想说这个名字不在名单上
谢谢如果您迭代字典中的键,将不会出现
键错误
,因为它们都会出现。如果键
与名称
不匹配,最好使用else
语句
def display_marks_for(adict,name):
if name in adict.keys():
print(name,"=",adict[name])
else:
print(name,'not on list')
或者,如果您确实希望使用KeyError
exception,请不要重复使用字典中的键:
def display_marks_for(adict,name):
try:
print(name,"=",adict[name]) #Will Raise KeyError if does not exist
except KeyError:
print(name,'not on list')
您的代码可以简化为以下内容,因为您不需要在所有键之间循环(这是字典的全部要点-避免循环查找某些内容): 字典的
get()
方法尝试为给定的键查找一个值,如果该值不存在,它将返回None
,而不是引发KeyError
如果您想练习捕获键错误
,您可以修改您的方法-再次注意,您不需要循环:
def display_marks_for(adict, name):
try:
mark = adict[name]
print('{}={}'.format(name, mark))
except KeyError:
print('{} is not in the dictionary'.format(name))
def display_marks_for(adict, name):
try:
mark = adict[name]
print('{}={}'.format(name, mark))
except KeyError:
print('{} is not in the dictionary'.format(name))