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
f
IOError
Use try .. except .. else:
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.