是否有可能针对此特定场景捕获 x['uri']
的 KeyError
。
joined_rooms = ('coala/coala', 'coala/coala-bears')
room_data = [{'id': '130', 'uri': 'coala/coala'},
{'id': '234', 'name': 'Nitanshu'},
{'id': '897', 'uri': 'coala/coala-bears'}]
for room in filter(lambda x: x['uri'] in joined_rooms, room_data):
#do stuff
这样做:
try:
for room in filter(lambda x: x['uri'] in joined_rooms, room_data):
#do stuff
except KeyError:
pass
将在引发 KeyError
后跳过所有项目。
除了迁移到带有 if 条件
的经典嵌套 for 循环
之外,还有什么方法可以解决这个问题吗?
最佳答案
Python dict
有一个 get
方法来应对这种情况。它有两个参数,第一个是您要查找的键,第二个是如果键不在字典中则使用的默认值。试试这个:
for room in filter(lambda x:x.get('uri',None) in joined_rooms, room_data):
#do stuff
这里的问题是,尽管在您的情况下可能不是问题,但您需要提供一个默认值,该默认值永远不会出现在 joined_rooms
。
关于python - 如何使用 lambda 函数在 python for 循环中捕获 KeyError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50778551/