我使用函数 f
来创建生成器,但有时它会引发错误。我希望主要代码发生两件事
- 主程序 block 中的
for
循环在发现错误后继续执行 - 在
except
中,打印出产生错误的索引(实际上索引3可能不会出现错误)
我想出的代码在出现错误后停止。如何实现上述两个特性?非常感谢。
def f(n):
for i in xrange(n):
if i == 3:
raise ValueError('hit 3')
yield i
if __name__ == '__main__':
a = enumerate(f(10))
try:
for i, x in a:
print i, x
except ValueError:
print 'you have a problem with index x'
最佳答案
如果您希望它的循环继续运行,您必须在生成器内部捕获异常。这是一个工作示例:
def f(n):
for i in xrange(n):
try:
if i == 3:
raise ValueError('hit 3')
yield i
except ValueError:
print ("Error with key: {}".format(i))
像你的例子一样遍历它给出:
>>> for i in f(10):
... print (i)
...
0
1
2
Error with key: 3
4
5
6
7
8
9
关于python try except yield 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39982763/