PETER HOFFMANN
Software Engineer
ph@peter-hoffmann.com
Peter Hoffmann - Google+
twitter.com/peterhoffmann
facebook.com/peter.hoffmann
[more about me]
Software Engineer
ph@peter-hoffmann.com
Peter Hoffmann - Google+
twitter.com/peterhoffmann
facebook.com/peter.hoffmann
[more about me]
Retry Decorator in Python
The retry decorator reruns a funtion tries times if an exception occurs.
import time
class Retry(object):
default_exceptions = (Exception,)
def __init__(self, tries, exceptions=None, delay=0):
"""
Decorator for retrying a function if exception occurs
tries -- num tries
exceptions -- exceptions to catch
delay -- wait between retries
"""
self.tries = tries
if exceptions is None:
exceptions = Retry.default_exceptions
self.exceptions = exceptions
self.delay = delay
def __call__(self, f):
def fn(*args, **kwargs):
exception = None
for _ in range(self.tries):
try:
return f(*args, **kwargs)
except self.exceptions, e:
print "Retry, exception: "+str(e)
time.sleep(self.delay)
exception = e
#if no success after tries, raise last exception
raise exception
return fn
Usage:
>>> from retry_decorator import Retry
>>> @Retry(2)
... def fail_fn():
... raise Exception("failed")
...
>>> fail_fn()
Retry, exception: failed
Retry, exception: failed
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "retry_decorator.py", line 32, in fn
raise exception
Exception: failed
gist.github.com Repository: http://gist.github.com/470611