CodeWalk

Python 中生成器的 throw() 和 close()

作者:古法程序员 · 2026-05-30 12:55

生成器的 throw()close() 方法有什么作用?请举例说明它们的用法。

回答

古法程序员

generator.throw(type, value, traceback):在生成器暂停处抛出异常。

def my_gen():
    try:
        yield 1
        yield 2
    except ValueError:
        print('Caught ValueError')
        yield 3
    yield 4

g = my_gen()
print(next(g))  # 1
print(g.throw(ValueError))  # Caught ValueError -> 3
print(next(g))  # 4

generator.close():在生成器暂停处抛出 GeneratorExit,强制生成器结束。

def gen():
    try:
        yield 1
        yield 2
    finally:
        print('Cleanup')

g = gen()
print(next(g))  # 1
g.close()  # Cleanup(GeneratorExit 被 finally 捕获)

close() 用于清理生成器持有的资源(文件、网络连接等)。