Brian Roberts wrote:
> I'm using using generators and iterators more and more intead of
> passing lists around, and prefer them. However, I'm not clear on the
> best way to detect an empty generator (one that will return no items)
> when some sort of special case handling is required.
>
Usually it will be the job of the generator to signal something like
this. I think a possible way might be:
class GeneratorEmpty: pass
def generator():
if not X:
raise GeneratorEmpty
for i in X:
yield i
try:
for x in generator
something (x)
except GeneratorEmpty:
generator_special_case
The trick is that when generators raise exceptions they terminate.
Although this is probably not what you want. The thing is that you
cannot know if a generator will return any elements until you call
its next() method.
> Q2: Is there a way that handles both lists and generators, so I don't
> have to worry about which one I've got?
I don't think this is possible. A generator must be called (with
next()) in order for its code to take over and see if it is empty or
not. Unlike the list.
jfj
--
http://mail.python.org/mailman/listinfo/python-list