[Python-Dev] Why are contexts also managers? (was r45544 - peps/trunk/pep-0343.txt)

Nick Coghlan ncoghlan at gmail.com
Wed Apr 19 14:00:21 CEST 2006


A.M. Kuchling wrote:
> On Tue, Apr 18, 2006 at 03:37:37PM -0400, Phillip J. Eby wrote:
>> I was going to say, "so they can be context managers", but I suppose you 
>> have a point.  There is no need for a context to have a __context__ method, 
>> unless it is also a context manager.  Ugh.
> 
> It would be easy to just remove the parenthetical comment from the PEP
> and forget about it, if in fact the statement is now purposeless.  But
> these are murky waters, and maybe there's still some deeper reason for
> it.  Nick, do you have any comments?

Aside from wondering "Did I even pretend to proofread that paragraph?"?

The second occurrence of "context manager" is meant to say "context":

     This PEP proposes that the protocol used by the with statement be
     known as the "context management protocol", and that objects that
     implement that protocol be known as "context managers". The term
     "context" then encompasses all objects with a __context__()
     method that returns a context object.

And the parenthetical comment was completely backwards and should have read:

   (This means that all context managers are contexts, but not all contexts are
    context managers).

The reason for recommending that context managers should be contexts is 
similar to the reason that iterators should be iterables - so that doing the 
__context__() call manually will still give you something that can be used in 
a with statement.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org


More information about the Python-Dev mailing list