MST

星途 面试题库

面试题:JavaScript高级生成器嵌套调用中的错误处理

在复杂的生成器嵌套调用场景下,比如有多层生成器嵌套(`gen1`调用`gen2`,`gen2`调用`gen3`),当`gen3`抛出一个错误时,如何在`gen1`中优雅地捕获并处理这个错误,同时不影响其他正常的生成器逻辑?请给出具体实现代码及说明。
10.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
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)

代码说明

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