首页 > 解决方案 > 链式迭代器就地

问题描述

有没有办法在迭代迭代器时扩展它。

我想迭代请求,如果它们超时,我想拆分请求并将它们添加到运行循环中。

像这样的东西:

l = [1, 2, 3, 4, 5]
it = iter(l)
for e in it:
  try: 
    request(e)
  except Exception:
    it.append(split_request(e))

append不起作用并itertools.chain返回一个新的迭代器,而不是就地更改迭代器。

标签: pythonpython-3.x

解决方案


你需要一个while循环。在其中,迭代列表并累积失败条目的列表。当该列表为空时,while循环可以终止。就像是:

while l:
    failures = []
    for e in l:
        try:
            request(e)
        except Exception:
            failures.append(split_request(e))
    l = failures

应该这样做。


推荐阅读