簡體   English   中英

嘗試 - 在循環內部除外

[英]try-except inside a loop

我需要調用方法f 如果它引發IOError ,我需要再次調用它(重試),並且最多執行三次。 我需要記錄任何其他異常,我需要記錄所有重試。

下面的代碼執行此操作,但它看起來很難看。 請幫我把它變得優雅和pythonic。 我使用的是Python 2.7。

謝謝!

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

使用try .. except .. else

for i in range(3, 0, -1):
  try:
    f()
  except IOError:
    if i == 1:
      raise
    print('retry')
  else:
    break

你不應該一般地捕獲所有錯誤。 讓它們冒泡到適當的處理程序。

你可以寫一個重試裝飾器:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM