python try except yield 组合

标签 python try-catch yield except

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

  1. 主程序 block 中的 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'

最佳答案

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

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/

相关文章:

linq - linq中foreach的 yield 返回

performance - 为什么在本例中使用序列比使用列表慢得多

python - 在 Ubuntu 中使用 python 而不是 python3 运行

python - 狮身人面像模板

C++ : how to return the value from an out of bounds array with exception handling?

r - R中包含空文件的错误/异常处理

python - 如何在一个多对一字段中连接多个字符字段?

python - 检查 DataFrame 或 ndrray 是否包含数字

java - 在这种情况下应该使用 try-finally

php - 如何使用 Laravel 的 @yield 设置 HTML 属性?