nos*_*nos 4 python yield try-catch except
我使用函数f来创建生成器,但有时会引发错误。我希望主代码发生两件事
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'
Run Code Online (Sandbox Code Playgroud)
如果您希望生成器的循环继续运行,则必须在生成器内部捕获该异常。这是一个工作示例:
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))
Run Code Online (Sandbox Code Playgroud)
像在您的示例中那样对其进行迭代给出:
>>> for i in f(10):
... print (i)
...
0
1
2
Error with key: 3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4960 次 |
| 最近记录: |