Retry Decorator in Python
The retry decorator reruns a funtion tries times if an exception occurs.
import time
class Retry(object):
defaultexceptions = (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.defaultexceptions
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</a>