循环中的try-except
我需要调用一个叫做 f
的方法。如果这个方法抛出一个 IOError
错误,我需要再调用它一次(重试),最多重试三次。如果出现其他错误,我需要记录这些错误,并且要记录所有的重试情况。
下面的代码实现了这个功能,但看起来很丑陋。请帮我把它变得优雅一些,更符合 Python 的风格。我正在使用 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
2 个回答
3
你可以写一个重试的装饰器:
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()
23
使用 try .. except .. else
:
for i in range(3, 0, -1):
try:
f()
except IOError:
if i == 1:
raise
print('retry')
else:
break
不要随便捕捉所有错误。让错误自然地传递到合适的处理程序那里去。