[Python-Dev] Re: anonymous blocks

Phillip J. Eby pje at telecommunity.com
Mon Apr 25 06:20:00 CEST 2005


At 09:12 PM 4/24/05 -0600, Steven Bethard wrote:

>I guess it would be helpful to see example where the looping
>with-block is useful.

Automatically retry an operation a set number of times before hard failure:

     with auto_retry(times=3):
         do_something_that_might_fail()

Process each row of a database query, skipping and logging those that cause 
a processing error:

     with x,y,z = log_errors(db_query()):
         do_something(x,y,z)

You'll notice, by the way, that some of these "runtime macros" may be 
stackable in the expression.

I'm somewhat curious what happens to yields in the body of the macro block, 
but I assume they'll just do what would normally occur.  Somehow it seems 
strange, though, to be yielding to something other than the enclosing 
'with' object.

In any case, I'm personally more excited about the part where this means we 
get to build co-routines with less magic.  The 'with' statement itself is 
of interest mainly for acquisition/release and atomic/rollback scenarios, 
but being able to do retries or skip items that cause errors is often 
handy.  Sometimes you have a list of things (such as event callbacks) where 
you need to call all of them, even if one handler fails, but you can't 
afford to silence the errors either.  Code that deals with that scenario 
well is a bitch to write, and a looping 'with' would make it a bit easier 
to write once and reuse many.



More information about the Python-Dev mailing list