MST

星途 面试题库

面试题:JavaScript生成器异常传递处理

假设存在多层嵌套的生成器函数调用,内层生成器抛出异常,如何确保外层生成器能正确捕获并处理该异常,同时不影响生成器函数链的正常执行逻辑?请详细说明处理思路并给出代码实现。
15.2万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 处理思路
    • 在内层生成器中,异常可以直接抛出。
    • 外层生成器通过try - except语句块来捕获内层生成器抛出的异常。
    • 捕获异常后,根据业务需求进行处理,然后可以继续生成器函数链的执行逻辑,例如通过yield返回值或者继续迭代生成器。
  2. 代码实现
def inner_generator():
    yield 1
    raise ValueError("Inner generator error")
    yield 2


def outer_generator():
    try:
        yield from inner_generator()
    except ValueError as e:
        print(f"Caught exception in outer generator: {e}")
        # 这里可以进行一些异常处理逻辑
        yield "Handled exception, continue execution"


# 使用生成器
gen = outer_generator()
for value in gen:
    print(value)

这段代码中,inner_generator抛出ValueError异常,outer_generator通过try - except捕获该异常并进行处理,然后继续生成器的执行逻辑,通过yield返回一个值,使得生成器函数链的执行不受太大影响。