このコードでは、使用するとfor
結果が発生しないのはなぜですかStopIteration
、またはfor
ループがすべての例外をトラップしてからサイレントに終了するのですか?その場合、なぜ私たちは無関係なのですreturn
か?または、次の
raise StopIteration
原因によるものですreturn None
か?
#!/usr/bin/python3.1
def countdown(n):
print("counting down")
while n >= 9:
yield n
n -= 1
return
for x in countdown(10):
print(x)
c = countdown(10)
next(c)
next(c)
next(c)
StopIteration
によってトリガーされていると仮定しますreturn None
。いつGeneratorExit
生成されますか?
def countdown(n):
print("Counting down from %d" % n)
try:
while n > 0:
yield n
n = n - 1
except GeneratorExit:
print("Only made it to %d" % n)
手動で行う場合:
c = countdown(10)
c.close() #generates GeneratorExit??
その場合、なぜトレースバックが表示されないのですか?