3 ms·
Instead of raising StopIteration you could also just return from the function. You could also make it a bit shorter if you swap the if branches. def f_iter(m
by ciupicri 7y ago
Instead of raising StopIteration you could also just return from the function. You could also make it a bit shorter if you swap the if branches.
def f_iter(many, args):
while True:
m = f(many, args)
if not m:
return
yield m
- zb 7y agoInstead of raising StopIteration you have to return from the function, otherwise you'll just get a RuntimeError starting with Python 3.7.
- ciupicri 7y agoYou're right. The [changelog] for Python 3.7 states: > [bpo-32670]: Enforce [PEP 479] for all code. This means that manually raising a StopIteration exception from a generator is prohibited for all code, regardless of whether ‘from __future__ import generator_stop’ was used or not. [changelog]: https://docs.python.org/3.7/whatsnew/changelog.html#id115 https://docs.python.org/3.7/whatsnew/changelog.html#id115 [bpo-32670]: https://bugs.python.org/issue32670 https://bugs.python.org/issue32670 [PEP 479]: https://www.python.org/dev/peps/pep-0479/ https://www.python.org/dev/peps/pep-0479/