1

我需要捕获引发的异常,next(it)因此在这种情况下我不能使用常规for循环。所以我写了这段代码:

it = iter(xrange(5))
while True:
    try:
        num = it.next()
        print(num)
    except Exception as e:
        print(e) # log and ignore
    except StopIteration:
        break
print('finished')

这不起作用,在数字用完后我得到一个无限循环。我究竟做错了什么?

4

1 回答 1

2

事实证明,StopIteration它实际上是 的子类Exception,而不仅仅是另一个可抛出的类。因此,StopIteration处理程序从未被调用,因为StopIteration它已经由 for 处理Exception。我只需要把StopIteration处理程序放在上面:

it = iter(xrange(5))
while True:
    try:
        num = it.next()
        print(num)
    except StopIteration:
        break
    except Exception as e:
        print(e) # log and ignore
print('finished')
于 2012-12-13T13:48:43.937 回答