我需要调用方法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
答案 0 :(得分:13)
使用try .. except .. else
:
for i in range(3, 0, -1):
try:
f()
except IOError:
if i == 1:
raise
print('retry')
else:
break
您不应该一般性地捕获所有错误。只需让它们冒泡到适当的处理程序。
答案 1 :(得分:1)
你可以写一个重试装饰器:
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()