我有一个过滤列表的列表推导:
l = [obj for obj in objlist if not obj.mycond()]
但是对象方法 mycond() 可以引发我必须拦截的异常。我需要在循环结束时收集所有错误以显示哪个对象产生了任何问题,同时我想确保循环所有列表元素。
我的解决方案是:
errors = []
copy = objlist[:]
for obj in copy:
try:
if (obj.mycond()):
# avoiding to touch the list in the loop directly
objlist.remove(obj)
except MyException as err:
errors = [err]
if (errors):
#do something
return objlist
在这篇文章中(如何在不重复的情况下循环列表本身时删除列表元素)我问是否有更好的方法来循环避免列表重复。
社区回答我避免就地修改列表并使用如果我忽略异常问题时适用的列表推导。
您认为有替代解决方案吗?我可以使用列表推导以这种方式管理异常吗?在这种情况下并使用大列表(我必须考虑什么大?)我必须找到另一种选择吗?