【发布时间】:2019-05-10 00:27:19
【问题描述】:
我遇到了一个 Python 3 代码的 sn-p:
def gen():
try:
while True:
yield 1
finally:
print("stop")
print(next(gen()))
我运行之后,一开始以为输出应该是:
1
但实际上结果是:
stop
1
怎么会这样?幕后发生了什么?
如果我运行for i in gen(): print(i),将会出现我所期望的无限循环。 for 和 next 这里有什么区别?
【问题讨论】:
-
你在什么环境下运行这个?
-
@VinceW。 python3.6.5
-
得到它,发布一个答案,关于垃圾收集
-
相关的line from the documentation:“yield 表达式允许在 try 构造中的任何位置。如果生成器在最终确定之前没有恢复(通过达到零引用计数或被垃圾收集),则将调用生成器迭代器的 close() 方法,允许执行任何未决的 finally 子句。"
标签: python python-3.x generator try-except