[Tutor] Pythonic way to "try a few times, then raise exception"?

johnf jfabiani at yolo.com
Sat Oct 27 01:44:05 CEST 2007


On Friday 26 October 2007 03:17:47 pm Alan Gauld wrote:
> "Allen Fowler" <allen.fowler at yahoo.com> wrote
>
> > I have a block of code buried deep in a module
> > that I expect to fail periodically.
> > (Calls to other machines over slow network, and such.)
> >
> > Generally, though,  trying it a second / third will work.
> >
> > Is there clean way to write this on Python?
>
> There was a thread on this a few days ago but I can't find it now...
>
> In general if you only have a few (eg hundreds) things to
> check you can run a loop inside a loop and exit it with break
> if it works. Pdeudo code:
>
> for item in list:
>     for attempt in range(3):
>          result = accessItem(item)
>          if result == OK: break
>          else: sleep(T)   # optional pause to regroup if needed...
>     else: logError(item)
>
> But I'm not sure if that's what you count as clean!
>
> If the volumes being processed it is usually better to
> gather the failures up for seondary processing after
> getting through the successful ones. This is a much
> more efficient way of handling high data volumes.
>
> HTH

What about placing the "try" in a function and call the function from a loop 
passing the variable to check (computer name).  Then each failure will not 
cause the app to stop processing.  Use a counter in the calling procedure to 
the number of attempts.

-- 
John Fabiani


More information about the Tutor mailing list