对于此特定场景,是否可以为 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/

10-12 01:19