[Python-Dev] Pre-PEP: with syntax (was: New syntax threads -- summary wanted)

Bernhard Herzog bh@intevation.de
10 Feb 2003 13:53:04 +0100


"M.-A. Lemburg" <mal@lemburg.com> writes:

> try:
>      with mylock:
>          ...
> finally:
>      ... other cleanup code ...
> 
> The new syntax saves you one line and obscures the code
> rather than clarifying what is happening (who knows what
> mylock does in its __enter__/__exit__ method ?).

If you come across an unfamiliar function or type you look it up in the
documentation or the source. I don't see the problem here.


> The original argument for this was not to save you typing,
> it was built on the rather unlikely case where the process
> receives a signal or MemoryError causing an exception while
> executing the byte codes after calling .acquire() and before
> entering the try-block.
> 
> However, that's not hard to deal with either because
> all you need to do is place the .acquire() call inside
> the try-block and then adding a check whether you have to
> release the lock in the finally-clause.

That just moves the race condition to a different place. If the acquire
call is inside the try block the place of the race condition is between
the acquire call and setting a flag or in the finally clause between
checking a flag and actually releasing the lock.

   Bernhard

-- 
Intevation GmbH                                 http://intevation.de/
Sketch                                 http://sketch.sourceforge.net/
MapIt!                                           http://www.mapit.de/