[Python-ideas] Possible PEP 380 tweak

Nick Coghlan ncoghlan at gmail.com
Fri Oct 29 03:17:15 CEST 2010


On Fri, Oct 29, 2010 at 1:04 AM, Guido van Rossum <guido at python.org> wrote:
> On Thu, Oct 28, 2010 at 5:44 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:
>> Yep, we've basically agreed on that as the way forward as well. We
>> have a small tweak to suggest for PEP 380 to avoid losing the return
>> value from inner close() calls,
>
> This is my "gclose()" function, right? Or is there more to it?

Yeah, the idea your gclose(), plus one extra tweak to the expansion of
"yield from" to store the result of the inner close() call on a new
GeneratorExit instance.

To use a toy example:

  # Even this toy framework needs a little structure
  class EndSum(Exception): pass

  def gsum():
    # Sums sent values until EndSum or GeneratorExit are thrown in
    tally = 0
    try:
      while 1:
        tally += yield
    except (EndSum, GeneratorExit):
      pass
    return x

  def average_sums():
    # Advances to a new sum when EndSum is thrown in
    # Finishes the last sum and averages them all when GeneratorExit
is thrown in
    sums = []
    try:
      while 1:
        sums.append(yield from gsum())
    except GeneratorExit as ex:
      # Our proposed expansion tweak is to enable the next line
      sums.append(ex.args[0])
    return sum(sums) / len(sums)

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia



More information about the Python-ideas mailing list