是否有可能为此特定场景捕获用于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之外,还有其他方法来处理这个问题吗?
发布于 2018-06-09 22:15:20
如前所述,如果字典中不存在键,则可以使用dict.get返回默认值。如果未提供,则此默认值为None。
作为替代,您可以使用生成器表达式。这将比filter + lambda表达式更有效。它也可能更具可读性:
for room in (x for x in room_data if x.get('iri') in joined_rooms):
# do something另一个完全有效的解决方案是在您的if循环中使用一个for语句:
for room in room_data:
if 'iri' in room:
# do somethinghttps://stackoverflow.com/questions/50778551
复制相似问题