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))