中斷髮電機檢測我有這樣的發電機:如何,它已經從外部
def gen():
rounds = 0
for x in xrange(10):
rounds += 1
yield x
print 'Generator finished (%d rounds)' % (rounds)
如果我通常把它叫做:
for x in gen():
pass
我得到預期:
Generator finished (10 rounds)
但是如果我中斷髮電機,我什麼也得不到:
for x in gen():
break
我想獲得:
Generator interrupted (1 rounds)
是否有可能發現,在發電機本身,它已被從外部中斷?有什麼Exception
,我可以趕上發現這個事件?
我懷疑有一個'Exception'。所發生的只是一次調用後該函數停止被調用。因爲這樣的控件永遠不會被返回到執行該'print'的函數。 – rspencer 2014-09-26 10:47:31
不,這裏沒有例外 - 你只是停止循環。你可以通過保留對生成器的引用並確保'next(gen)'提高'StopIteration'來處理它,但是不能從內部看到 - 生成器只是等待,直到它再次被調用或垃圾收集。 – jonrsharpe 2014-09-26 10:49:12
這不是你要求的,但你*可以*包裝在一個上下文管理器中的生成器,並使用'__exit__' - 像這樣:http://ideone.com/X7637V – jedwards 2014-09-26 10:58:40