py3: catch StopIteration from next() in generatorset

IIUC, letting the StopIteration through would not cause any bugs, but
not doing it makes the test-py3-commands.t pass.

I have also diligently gone through all uses of next() in our code
base. They either:

 * are not called from a generator
 * pass a default value to next()
 * catch StopException
 * work on infinite iterators
 * request a fixed number of items that matches the generated number
 * are about batching in wireproto which I didn't quite follow

I'd appreciate if Augie or someone else could take a look at the
wireproto batching and convince themselves that the next(batchable)
calls there will not raise a StopIteration.
This commit is contained in:
Martin von Zweigbergk 2017-06-20 14:00:41 -07:00
parent 173062cab9
commit 153a1c94b7

View File

@ -871,7 +871,10 @@ class generatorset(abstractsmartset):
if i < _len(genlist):
yield genlist[i]
else:
try:
yield _next(nextgen)
except StopIteration:
return
i += 1
return gen()