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

Reply via email to