【问题标题】:Returning an exception after using a loop使用循环后返回异常
【发布时间】:2015-11-04 12:20:10
【问题描述】:

我的函数被传递了一个字典(一个名字和一个分数)和一个名字。然后它比较名称以查看其是否在字典中,如果是,则打印名称和分数。

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

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

我想让它说这个名字不在列表中。

谢谢

【问题讨论】:

    标签: python exception dictionary exception-handling keyerror


    【解决方案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))
    

    【讨论】:

      【解决方案2】:

      如果您遍历字典中的键,您将不会得到keyError,因为它们都会在那里。如果keyname 不匹配,您最好使用else 语句

      def display_marks_for(adict,name):
          if name in adict.keys():
              print(name,"=",adict[name])
          else:
              print(name,'not on list')
      

      或者,如果您确实想使用 KeyError 异常,请不要遍历您的字典键:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 2020-06-04
        • 2017-07-20
        • 2023-01-13
        • 1970-01-01
        相关资源
        最近更新 更多