首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在带有lambda函数的pythonfor循环中捕获KeyError?

如何在带有lambda函数的pythonfor循环中捕获KeyError?
EN

Stack Overflow用户
提问于 2018-06-09 21:08:09
回答 1查看 2.3K关注 0票数 3

是否有可能为此特定场景捕获用于KeyErrorx['uri']

代码语言:javascript
复制
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

这样做:

代码语言:javascript
复制
try:
    for room in filter(lambda x: x['uri'] in joined_rooms, room_data):
        #do stuff
except KeyError:
    pass

将跳过KeyError引发后的所有项目。

除了迁移到典型的带有for loops的嵌套if condition之外,还有其他方法来处理这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-09 22:15:20

如前所述,如果字典中不存在键,则可以使用dict.get返回默认值。如果未提供,则此默认值为None

作为替代,您可以使用生成器表达式。这将比filter + lambda表达式更有效。它也可能更具可读性:

代码语言:javascript
复制
for room in (x for x in room_data if x.get('iri') in joined_rooms):
    # do something

另一个完全有效的解决方案是在您的if循环中使用一个for语句:

代码语言:javascript
复制
for room in room_data:
    if 'iri' in room:
        # do something
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档