【发布时间】:2014-01-25 11:51:28
【问题描述】:
我想在迭代器的循环之外捕获一个 intetartor 在其迭代之一中抛出的异常。
这是一个非常简化的代码版本:
class C(object):
def _iter(self):
for x in range(100):
yield x, x + 3
def doit(self):
for a, b in self._iter(): # <-- how can I capture an excepcion here?
print(a, b)
我可以在迭代器循环中捕获异常,但我如何将错误传递给doit 方法进行报告?我想让异常一直传播到 doit 函数,在那里我可以收集错误并继续下一个元素。
我还需要处理所有的迭代,收集错误并处理所有没有错误的迭代,这样我就可以在最后报告所有错误。这样一来,单个错误就不会阻止对所有其他元素的处理。
【问题讨论】:
-
为什么不对
_iter()实例方法内部处理错误? -
@F.C.捕获并处理错误后是否要继续循环
for a, b in self._iter():?只有我一个人这样解读吗? -
@jonrsharpe 因为在
_iter内部我无法收集所有错误,并且因为_iter必须返回doit可以使用的东西。 -
@Nabla 这就是问题所在,我想收集所有错误并处理所有没有错误的迭代并在最后报告错误。
-
@Nabla 谢谢你,如果你喜欢标记为重复