1

我是 python 新手,但有 perl 经验。所以我有一本这样的字典

d = { '123' : 'F'
      '124' : 'S'
      '125' : 'F'
    }

我正在为一个包含键值的列表运行一个循环,但我的字典中可能不存在一些。当我运行代码时出现错误

print(d[str(row[0])])


KeyError: '126'

Perl 永远不会对我这样做。请帮助一个无知的程序员。

4

3 回答 3

2

您可以使用永远不会引发异常的dict.get() :KeyError

如果键在字典中,则返回键的值,否则返回默认值。如果未给出默认值,则默认为无,因此此方法永远不会引发 KeyError。

print(d.get(str(row[0])))

或者,您可以在尝试通过键获取值之前检查键是否在字典中:

key = str(row[0])
if key in d:
    print(d[key])

或者,您也可以捕获KeyError异常:

key = str(row[0])
try:
    print(d[key])
except KeyError:
    print("Key '{}' not found".format(key)
于 2014-03-12T02:27:11.017 回答
1

我认为首选的方式是

my_dict.get(key,None)
于 2014-03-12T02:51:16.053 回答
0

Python 比 Perl 更面向对象——因此您可以轻松地派生出您自己的dict子类,当您尝试访问丢失的键时,它会做任何您想做的事情。然而,编写难以阅读的代码需要更多的努力,但这是可以做到的。例如:

class MyDict(dict): __missing__ = lambda _, k: '%s?' % k

d = MyDict((('123', 'F'), ('124', 'S'), ('125', 'F'),))

row = 126, 123, 124
print(d[str(row[0])])  # -> 126?
于 2014-03-12T05:18:44.403 回答