Python 尝试在循环内进行
我需要调用方法Python 尝试在循环内进行,python,Python,我需要调用方法f。如果它引发一个IOError,我需要再次调用它(重试),最多调用三次。我需要记录任何其他异常,我需要记录所有重试 下面的代码可以做到这一点,但看起来很难看。请帮我把它弄得优雅,像蟒蛇一样。我正在使用Python 2.7 谢谢 count = 3 while count > 0: try: f() except IOError: count -= 1 if count > 0: p
f
。如果它引发一个IOError
,我需要再次调用它(重试),最多调用三次。我需要记录任何其他异常,我需要记录所有重试
下面的代码可以做到这一点,但看起来很难看。请帮我把它弄得优雅,像蟒蛇一样。我正在使用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。。除了否则
:
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()
您可能希望在最后一次尝试时重新引发
IOError
,以便程序以实际异常结束(并且没有关于未发生重试的注释)。谢谢。“else”子句很有用,但我需要记录所有异常,所以我也必须捕获其他异常。是的,我把它们记录下来后又冷起来了。@poke-Oops,完全忘了。更新。@akonsu如果要捕获所有异常,只需省去IOError
或用BaseException
替换即可。