Advertisement
Guest User

smth_to_retry

a guest
Feb 1st, 2021
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.76 KB | None | 0 0
  1. class RetryExhaust(Exception):
  2.     pass
  3.  
  4.  
  5. def retry(tries:int=1, error_handler:object = None):
  6.     def wrapper(function):
  7.         def wrapped(*args, **kwargs):
  8.             counter = 1
  9.             retry = True
  10.             while retry and tries >= counter:
  11.                 if tries == 1:
  12.                     try:
  13.                         return function(*args, **kwargs)
  14.                     except Exception as e:
  15.                         if counter <=tries:
  16.                             if error_handler:
  17.                                 retry = error_handler(e)
  18.                             else:
  19.                                 retry = False
  20.                                 raise e
  21.                 elif tries > 1:
  22.                     try:
  23.                         return function(*args, **kwargs)
  24.                     except Exception as e:
  25.                         if counter <tries:
  26.                             if error_handler:
  27.                                 retry = error_handler(e)
  28.                                 if retry:
  29.                                     counter +=1
  30.                                 else:
  31.                                     retry = False
  32.                             else:
  33.                                 counter +=1
  34.                             continue
  35.                         else:
  36.                             raise RetryExhaust(f'Exception: {repr(e)} , Attempts:{counter}')
  37.            
  38.         return wrapped
  39.     return wrapper
  40.  
  41.  
  42. def test_division_handler(e:object):
  43.     exc_type = e.__class__.__name__
  44.     if exc_type == "ZeroDivisionError":
  45.         print('What to do?')
  46.         return True
  47.     else:
  48.         raise e
  49.  
  50. @retry(tries=2, error_handler=None)
  51. def test_division(a:int=1, b:int=0):
  52.     print(a/b)
  53.  
  54. test_division()
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement