python尝试除产量组合

nos*_*nos 4 python yield try-catch except

我使用函数f来创建生成器,但有时会引发错误。我希望主代码发生两件事

  1. for捕获错误后,主块中的循环继续
  2. 在中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)

bri*_*pck 6

如果您希望生成器的循环继续运行,则必须生成器内部捕获该异常。这是一个工作示例:

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)