[Python-ideas] A couple of with statement ideas

Nick Coghlan ncoghlan at gmail.com
Sat Feb 26 01:46:24 CET 2011


On Sat, Feb 26, 2011 at 8:46 AM, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
> From: Bruce Leban [mailto:bruce at leapyear.org]
>
>> Why do you think "it's important that the name ... not have the word
>> "context" in it *anywhere*"?
>
> Maybe it's not that important. I'm just trying to avoid any
> chance of lingering confusion.

The best I have at the moment is "objects with an implicit context
manager", but that's still a huge improvement over where we were when
PEP 343 was implemented.

Back then, we weren't sure whether "context manager" referred to the
objects with __context__ or the objects with __enter__/__exit__. Since
Guido decided to drop the first option completely, the question is now
solidly resolved in favour of the latter, so it opens up the
possibility of adding back a __with__, __cm__, __context_manager__ or
__manager__ method using a new term or phrase for the objects that
implement it.

The iterator/iterable precedent suggests manager->manageable as a
possibility, but "manageable objects" isn't easy to write *or* to say.
"Managed objects" could work, though (despite being slightly less
technically correct).

It sounds like there's enough interest in that idea that it's worth
pursuing - it still needs someone to write/champion the PEP though.

No comments on the PEP 377 variant though, which is a little
disappointing. I see the fact that, depending on the details of cmA()
and cmB() this code:

  @contextmanager
  def cmAB():
    with cmA(), cmB():
      yield

  with cmAB():
    # Do stuff

may throw RuntimeError, while the inline equivalent works just fine:

  with cmA(), cmB():
    # Do stuff

as a bit of a design flaw in the underlying structure of the context
management protocol.

Cheers,
Nick.

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



More information about the Python-ideas mailing list