Python函数for循环无法迭代generator生成器问题求助
Python生成器遍历未进入for循环的原因排查
- 生成器已被提前消费耗尽
Python生成器是一次性迭代对象,只要此前被list()/tuple()等方法转换、被next()调用、被其他for循环遍历过,内部迭代指针就会走到末尾,再次遍历时不会产出任何值,也不会进入循环。
验证示例:
def demo_gen(): yield 0.1 yield 0.2 g = demo_gen() # 第一次消费耗尽 list(g) # 第二次遍历无输出 for val in g: print("进入循环") # 不会执行
- 生成器本身无任何产出
定义生成器的逻辑本身未触发任何yield语句,常见场景包括:生成器内部判断条件永远不满足、生成器迭代的原始对象为空、生成器过滤规则筛掉了所有元素。
验证示例:
# 条件永远不满足,无yield执行 def empty_gen(): if 1 < 0: yield 0.3 for val in empty_gen(): print("进入循环") # 不会执行
- 传参错误,未传入有效的生成器实例
如果调用join_probabilities时,传入的prob_generator是生成器函数本身而非调用后的生成器实例,或者是已经调用close()方法关闭的生成器,也会导致遍历无输出。如果是传入生成器函数的场景,Python会直接抛出类型错误,若上层代码捕获了该异常,也会出现循环不执行的表现。
内容的提问来源于stack exchange,提问作者Darya Sanina
相关产品推荐
相关产品推荐

