[Python-Dev] Proposed resolutions for open PEP 343 issues

Guido van Rossum guido at python.org
Sun Oct 23 18:19:40 CEST 2005

On 10/23/05, Nick Coghlan <ncoghlan at gmail.com> wrote:
> However, I'm still concerned about the fact that the following class has a
> context manager that doesn't actually work:
>    class Broken(object):
>      def __context__(self):
>          print "This never gets executed"
>          yield
>          print "Neither does this"

That's only because of your proposal to endow generators with a
default __context__ manager. Drop that idea and you're golden.

(As long as nobody snuck the proposal back in to let the
with-statement silently ignore objects that don't have a __context__
method -- that was rejected long ago on.)

In my previous mail I said I had to think about that one more -- well,
I have, and I'm now -1 on it. Very few generators (that aren't used a
context manangers) will need the immediate explicit close() call, and
it will happen eventually when they are GC'ed anyway. Too much magic
is bad for your health.

> So how about if type_new simply raises a TypeError if it finds a
> generator-iterator function in the __context__ slot?

No. type should not bother with understanding what the class is trying
to do. __new__ is only special because it is part of the machinery
that type itself invokes in order to create a new class.

--Guido van Rossum (home page: http://www.python.org/~guido/)

More information about the Python-Dev mailing list