【发布时间】:2020-09-16 20:46:24
【问题描述】:
为什么这段代码运行良好且不抛出异常?
def myzip(*args):
iters = [iter(arg) for arg in args]
try:
while True:
yield tuple([next(it) for it in iters])
except StopIteration:
return
for x, y, z in myzip([1, 2], [3, 4], [5, 6]):
print(x, y, z)
但如果这一行
yield tuple([next(it) for it in iters])
替换为
yield tuple(next(it) for it in iters)
然后一切都停止工作并抛出RuntimeError?
【问题讨论】:
-
printyield的每个参数;你会看到区别的。 -
我无法重复这个问题,它对我有用:>>> tuple(next(it) for it in iters); (1, 3, 5)
-
@Prune 这不是重复的。我相信这是一个有效的错误,
StopIteration异常应该由生成器表达式捕获和处理,而不是作为RuntimeError重新引发。 -
@antont 查看演示:repl.it/@blhsing/VagueFreshKernel
-
@blhsing 我现在看到了;我对代码做了更多的修改,而且....是的,你是对的。
标签: python python-3.x python-2.7 list-comprehension python-zip