[Python-Dev] 'With' context documentation draft (was Re: Terminology for PEP 343

Michael Hudson mwh at python.net
Fri Jul 8 13:39:58 CEST 2005


Walter Dörwald <walter at livinglogic.de> writes:

> Am 07.07.2005 um 20:00 schrieb Guido van Rossum:
>
>>>> +1 on @contextmanager
>>
>> +1.
>>
>> [__enter__, __exit__]
>>
>>>>> These names should be changed to __beginwith__ and __endwith__.
>>>>>
>>
>> -1.  The PEP has had an extensive review period and several
>> alternatives were discussed and rejected. These names are clear, they
>> *do* match, and as Fred says the __*__ namespace has lots of room.
>>
>> Also, the PEP was accepted with these names. Now, if it was accepted
>> with a major flaw or some semantics left unspecified,
>
> What is still unspecified (or at least not explicitely mentioned) in  
> the PEP is the lifetime of VAR in:
>
>          with EXPR as VAR:
>              BLOCK
>
> Does VAR overwrite or shadow any previous values of VAR? 

Yup!  Or at least in my half-an-implementation, that's what happens.

(PEP 343 is a lot harder to implement then you might think, btw -- the
stack discipline around finally: statements is a bit mind-bending).

> I.e. will VAR still exist after the end of the block with its value
> the return value of __enter__() or will it revert to the previous
> value (if any)?

Eh, no.  Where would you store the old value?

> I'd prefer the later although interpreting the translation of
>
>          with EXPR as VAR:
>              BLOCK
>
> into
>
>          abc = EXPR
>          exc = (None, None, None)
>          VAR = abc.__enter__()
>          try:
>              try:
>                  BLOCK
>              except:
>                  exc = sys.exc_info()
>                  raise
>          finally:
>              abc.__exit__(*exc)
>
>
> literally would indicate the former.

Please continue to interpret it like that :)

Cheers,
mwh

-- 
  > Why are we talking about bricks and concrete in a lisp newsgroup?
  After long experiment it was found preferable to talking about why
  Lisp is slower than C++...
                        -- Duane Rettig & Tim Bradshaw, comp.lang.lisp


More information about the Python-Dev mailing list