使用循环后返回异常

时间:2015-08-12 04:14:58

标签: 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')

如果名称在字典中,我的代码会输出正确的内容,但如果名称不存在,则不会打印任何内容吗?

我希望它说名字不在名单上。

由于

2 个答案:

答案 0 :(得分:1)

如果你正在迭代字典中的键,你将不会得到$sql = "SELECT * FROM phones where phoneserial = '{$esn}'"; ,因为它们都将在那里。如果keyError不匹配else

,您最好使用key语句
name

或者,如果您确实想要使用def display_marks_for(adict,name): if name in adict.keys(): print(name,"=",adict[name]) else: print(name,'not on list') 例外,请不要遍历您的字典键:

KeyError

答案 1 :(得分:1)

您的代码可以简化为以下内容,因为您不需要遍历所有密钥(这是字典的全部内容 - 避免循环查找内容):

def display_marks_for(adict, name):
   mark = adict.get(name)
   if mark:
      print('{}={}'.format(name, mark))
   else:
      print('{} is not in the dictionary'.format(name))

词典的get()方法尝试查找给定键的值,如果它不存在 - 而不是引发KeyError,则返回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))