python循环捕捉异常_python – 如何在for循环迭代器中捕获异常

如果您的内部迭代可以在异常之后继续,那么您需要将其包装成一个简单的生成器:

def wrapper(gen):

while True:

try:

yield next(gen)

except StopIteration:

raise

except Exception as e:

print(e) # or whatever kind of logging you want

pass

例如:

In [9]: list(wrapper(csv.reader(open('test.csv', 'r'))))

field larger than field limit (10)

Out[9]: [['foo', 'bar', 'baz'], ['abc', 'def', 'ghi']]

另一方面,如果内部迭代器在异常之后无法继续,则无法包装它:

def raisinggenfunc():

yield 1

raise ValueError("spurious error")

yield 3

In [11]: list(wrapper(raisinggenfunc()))

spurious error

Out[11]: [1]

通过调用Python生成器函数或评估生成器表达式创建的任何生成器将不会被恢复.

在这种情况下,您需要找到一些方法来创建一个恢复迭代的新迭代器.对于像csv.reader这样的东西,这意味着在将文件包装在csv.reader之前从文件中读取n行.在其他情况下,可能意味着将n传递给构造函数.在其他情况下 – 就像上面提到的那样,只是不可能.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值