Update (2022-09-05): The issue described in this post was addressed by PEP
479, which made it so that StopIteration
is automatically changed into a RuntimeError
when raised inside a generator.
As of python 3.5 (which was already available when this post was written), it
was possible to opt into the new behavior with from __future__ import generator_stop
, and the default was changed in python 3.7.
Sometimes, if I have a generator that I happen to know is non-empty, and I want to get at the first element, I’ll write code like this:
output = next(f for f in os.listdir(dir) if f.endswith('.o'))