首页 > 解决方案 > 如何使用 lambda 函数在 python for 循环中捕获 KeyError?

问题描述

是否有可能为这种特定情况捕获一个KeyErrorfor 。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

标签: pythonpython-3.x

解决方案


Pythondict有一种get方法可以应对这种情况。它需要两个参数,第一个是您要查找的键,第二个是在字典中不存在该键时使用的默认值。尝试这个:

for room in filter(lambda x:x.get('uri',None) in joined_rooms, room_data):
    #do stuff

这里的问题,虽然在您的情况下可能不是问题,但您需要提供一个永远不会出现在joined_rooms.


推荐阅读