Python 中生成器的 throw() 和 close()
生成器的 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() 用于清理生成器持有的资源(文件、网络连接等)。