对于此特定场景,是否可以为 KeyError
捕获 x['uri']
。
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
引发后将跳过所有项目。除了使用
for loops
迁移到经典的嵌套 if condition
之外,还有什么方法可以解决这个问题? 最佳答案
Python dict
s 有一个 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/