python - 如何使用 lambda 函数在 python for 循环中捕获 KeyError?

标签 python python-3.x

是否有可能针对此特定场景捕获 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/

相关文章:

python - 如何获得遗传算法分类器绘制 ROC 曲线的分数?

Python:分配变量并忽略 'IndexError'

python - 简洁的函数定义,只返回参数值

python - 单独文件中的功能较慢

html - 使用 grequests 从异步请求中提取文本

python - for循环迭代元组

python - 使用 Python 创建 MySQL 游标函数

python - 排序/分组中的 Lambda 函数

python - 是否可以在 Enum 中定义类常量?

python - 对 yield 和返回感到困惑