[Python-Dev] With context, please
Phillip J. Eby
pje at telecommunity.com
Sun Apr 23 08:03:40 CEST 2006
At 01:33 PM 4/23/2006 +1000, Nick Coghlan wrote:
>Phillip J. Eby wrote:
>>At 09:25 AM 4/22/2006 -0700, Aahz wrote:
>>> EXPRESSION returns a value that the with statement uses to create a
>>> context (a special kind of namespace). The context is used to
>>> execute the BLOCK. The block might end normally, get terminated by
>>> a break or return, or raise an exception. No matter which of those
>>> things happens, the context contains code to clean up after the
>>> block.
>>>
>>> The as NAME part is optional. If you include it, you can use NAME
>>> in your BLOCK
>>>
>>>Then a bit later:
>>>
>>> The protocol used by the with statement is called the context
>>> management protocol, and objects implementing it are context
>>> managers.
>As far as I can tell, Aahz's book doesn't currently say anything that
>favours one interpretation over the other (which is probably a good thing
>from Aahz's point of view :).
Read the first sentence again:
"EXPRESSION returns a value that the with statement uses to *create* a
context" (emphasis added).
It doesn't say that the value *is* the context, and if anything, the second
excerpt supports that by implying that the context manager is the thing
passed to the "with" statement.
I could be wrong, Nick, but it really looks to me like you're the only
person who's gotten this particular interpretation, and I at least don't
understand what the supporting argument for your interpretation is, other
than that it's what you always meant it to be. (Whereas there are obvious
rationales for __context__ returning a "context" object, and for a context
manager being longer lived than contexts.)
I also haven't seen you explain your theory of why you should be able to
take the object returned from __context__ and pass it into the "with"
statement.
Given those things, I'd suggest that the consensus is overwhelmingly in
favor of the "with contextmanager" terminology, or something similar, and
that should be what gets used. I don't think it's fair to say that there's
a lack of consensus in the sense that it could go either way like a 50-50
or 60-40. So far, it's 5:1 against the object passed to "with" being
called the "context", even if Guido abstains.
Also, there haven't been any complaints of the a1 documentation being
unclear on this; rather, it was the *PEP* that was considered
confusing. So in effect, we already tested this in a1, with one
interpretation in the docs and another in the PEP, and the documenation won.
More information about the Python-Dev
mailing list