try-except inside a loop

前端 未结 2 1239
伪装坚强ぢ
伪装坚强ぢ 2020-12-30 13:34

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

相关标签:
2条回答
  • 2020-12-30 14:04

    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()
    
    0 讨论(0)
  • 2020-12-30 14:26

    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.

    0 讨论(0)
提交回复
热议问题