I need to invoke method f
. If it raises an IOError
, I need to invoke it again (retry), and do it at most three times. I need to log any other excep
You can write a retry decorator:
import time
def retry(times=3, interval=3):
def wrapper(func):
def wrapper(*arg, **kwarg):
for i in range(times):
try:
return func(*arg, **kwarg)
except:
time.sleep(interval)
continue
raise
return wrapper
return wrapper
//usage
@retry()
def fun():
import inspect; print inspect.stack()[0][3]
return "result"
print fun()
Use try .. except .. else
:
for i in range(3, 0, -1):
try:
f()
except IOError:
if i == 1:
raise
print('retry')
else:
break
You should not generically catch all errors. Just let them bubble up to the appropriate handler.