我是 python 新手,但有 perl 经验。所以我有一本这样的字典
d = { '123' : 'F'
'124' : 'S'
'125' : 'F'
}
我正在为一个包含键值的列表运行一个循环,但我的字典中可能不存在一些。当我运行代码时出现错误
print(d[str(row[0])])
KeyError: '126'
Perl 永远不会对我这样做。请帮助一个无知的程序员。
我是 python 新手,但有 perl 经验。所以我有一本这样的字典
d = { '123' : 'F'
'124' : 'S'
'125' : 'F'
}
我正在为一个包含键值的列表运行一个循环,但我的字典中可能不存在一些。当我运行代码时出现错误
print(d[str(row[0])])
KeyError: '126'
Perl 永远不会对我这样做。请帮助一个无知的程序员。
您可以使用永远不会引发异常的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)
我认为首选的方式是
my_dict.get(key,None)
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?