[英]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.