如何以pythonic方式重写此代码?
0 1 2
0 1 2 3
我可以使用内置功能吗?
答案 0 :(得分:6)
更多的pythonic方式做N次是将xrange
与_
变量一起使用:
for _ in xrange(3):
try:
function()
break
except Exception as e:
print e
另外,请考虑捕获更具体的异常而不是根Exception
类。
答案 1 :(得分:1)
您可以使用retry decorator:
@retries(3)
def execTask():
f()
比提供的链接更简单的一个看起来像这样:
def retry(times=3):
def do_retry(f, *args, **kwargs):
cnt = 0
while cnt < times:
try:
f(*args, **kwargs)
return
except:
cnt += 1
return do_retry
可以像这样使用:
@retry(3)
def test():
print("Calling function")
raise Exception("Some exception")
答案 2 :(得分:0)
tried = 0
while tried < 3:
try:
function()
break
except Exception as e:
print e
tried += 1
这几乎就是你编写它的方式,除了你在while行的末尾需要一个冒号并将中断移动到“try”块。
答案 3 :(得分:-4)
鉴于OP的动机是限制尝试运行 function()
的失败次数,以下代码不提供任何人工体操,但是限制尝试次数和保留事后分析的实际尝试次数(如果需要的话)
tried = 0
while tried < 3:
try:
function() # may throw an Exception
break # on success pass through/return from function()
except Exception as e:
print e
tried += 1
# retains a value of tried for ex-post review(s) if needed