2017-09-12 7 views
0

私は、値のタプルを返し発電機、書いた:Pythonで明示的にジェネレータの終了を検出するには?

import numpy as np 

def mygenerator(): 
    data = np.arange(10) 
    data = np.reshape(data, (-1, 2)) 
    for row in data: 
     yield row[0], row[1] 

generator = mygenerator() 
while True: 
    a, b = generator.__next__() 
    print("a: ", a, "b: ", b) 

をしてfor ... inせずにそれを使用したいと思います。どのように世代の終わりを検出する?

+1

'next'を呼び出して、手動で' StopIteration'を捕捉してください。 –

+0

https://stackoverflow.com/a/14413978の情報ビット... –

+0

迷惑な質問かもしれませんが、なぜforループを使用できないのでしょうか?それが本当に不可能かどうかを確認するコードをもう少し見せてくれるのは心配ですか? –

答えて

3

ジェネレータは、使い果たされたときに例外StopIterationをスローします。それが発生したときにあなたは... tryexcept声明、終了ループを例外をキャッチすることができます

while True: 
    try: 
     a, b = next(generator) 
    except StopIteration: 
     break 
    print("a: ", a, "b: ", b) 

をところで、なぜforループ?それは次のようになります:

for a, b in generator: 
    print("a: ", a, "b: ", b) 

正確には、煩雑な構成はありません。

+0

これはStackoverflowです:複雑な例を書いた場合、その短い例に適した簡単なコードを使用するように指示した短い例を書くと、それを省略するように指示されました:) – Dims

+0

'for ... in'は使用できません私の実際のコードでは、返された値の複雑な処理と異なるループの切り替えを使用しています。 – Dims

+0

複雑なコードを持つことはまれですが、大丈夫です... –

関連する問題