def gen3():
yield 1
raise ValueError("gen3 抛出的错误")
def gen2():
try:
yield from gen3()
except ValueError as e:
print(f"gen2 捕获到错误: {e}")
yield "错误处理后的替代值"
def gen1():
try:
yield from gen2()
except ValueError as e:
print(f"gen1 捕获到错误: {e}")
for value in gen1():
print(value)
代码说明
gen3
生成器: 它在生成一个值1
后,抛出一个ValueError
错误。
gen2
生成器: 使用yield from
调用gen3
。这里通过try - except
块捕获gen3
抛出的ValueError
,并打印错误信息。然后返回一个替代值,这样即使gen3
出错,gen2
仍能继续提供值。
gen1
生成器: 同样使用yield from
调用gen2
。gen1
也有自己的try - except
块来捕获gen2
传递上来的错误(如果gen2
没有处理掉错误)。
- 主程序: 通过
for
循环迭代gen1
,打印生成器生成的值。这样在gen3
抛出错误时,gen2
和gen1
都可以捕获并处理,且不会中断整个生成器逻辑。