Try-except inside the loop

I need to call the f method. If it raises an IOError , I need to raise it again (try again) and do this at most three times. I need to log any other exceptions, and I need to log all retries.

the code below does this, but looks ugly. please help me make it elegant and pythonic. I am using Python 2.7.

thanks!

 count = 3 while count > 0: try: f() except IOError: count -= 1 if count > 0: print 'retry' continue except Exception as x: print x break 
+4
source share
2 answers

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, in general terms, catch all errors. Just let them go to the appropriate handler.

+12
source

You can write a replay 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() 
+1
source

Source: https://habr.com/ru/post/1380428/


All Articles