[Python-ideas] Possible PEP 380 tweak (original) (raw)

Guido van Rossum guido at python.org
Tue Oct 26 19:01:50 CEST 2010


On Tue, Oct 26, 2010 at 5:22 AM, Jacob Holm <jh at improva.dk> wrote: [...]

Here's a stupid idea... let g.close take an optional argument that it can return if the generator is already exhausted and let it return the value from the StopIteration otherwise.

def close(self, default=None):  if self.giframe is None:  return default  try:  self.throw(GeneratorExit)  except StopIteration as e:  return e.args[0]  except GeneratorExit:  return None  else:  raise RuntimeError('generator ignored GeneratorExit') You'll have to explain why None isn't sufficient.

It is not really necessary, but seemed "cleaner" somehow.  Think of "g.close(default)" as "get me the result if possible, and this default otherwise".  Then think of dict.get()...

Hm, I'd say there always is a result -- it just sometimes is None. I really don't want to make distinctions between falling off the end of the function, "return" without a value, "return None", "raise StopIteration()", "raise StopIteration(None)", or even (in response to a close() request) "raise GeneratorExit".

You mentioned some possible extensions though.  At a guess, at least some of these would benefit greatly from the use of generators.  Maybe such an extension would be a better example?

Yes, see the avg() example I posted in the parent thread.

-- --Guido van Rossum (python.org/~guido)



More information about the Python-ideas mailing list