我有下面的代码,所以当任何异常发生时,重新做这个循环,而不是跳到下一个循环。请注意这里的伪代码确实按预期工作:
for cl in range(0, 10):
try:
some_function(cl)
except :
cl -= 1
我的倡议是一旦出了问题,就再做一次。显然,这不是一个可行的想法。所以假设for
循环和range function
被使用,如何实现我描述的控制?
谢谢
您只需要在第一个循环中继续尝试该函数,直到它起作用:
for cl in range(0, 10):
while True:
try:
some_function(cl)
except Exception:
continue # try it again
else:
break # exit inner loop, continue to next c1
为了更好地控制循环变量,您可能需要使用while
循环:
cl = 0
while cl < 10:
try:
some_function(cl)
cl += 1
except:
pass
在 Python 中,该pass
语句是一个“什么都不做”的占位符。如果出现异常,cl
将再次尝试相同的值。
当然,您还需要添加一些机制,如果您总是遇到异常,您可以退出循环。
因为我对循环有病态的仇恨while True
,所以我建议简化@kindall 的答案:首先,改变some_function()
它以使其False
在失败时返回而不是抛出异常。然后,使用以下循环:
for cl in range(0, 10):
while not some_function(cl): pass
如果您不能(或不想) change some_function()
,您可以添加一个包装器:
def exceptionless_function(arg):
try:
some_function(arg)
return True
except <known exceptions>:
return False
编辑:我在<known exceptions>
上面添加以表明except
应避免使用不合格条款。如果您不知道实际希望捕获哪些类型的异常,那么在某些情况下,简单地再次调用该函数几乎肯定是错误的行为。例如,OP 提到(在评论中)如果在重试此功能时发生超时,将会有“警报”。如果该警报碰巧以某种异常的形式出现,那么在“包罗万象”的情况下,它将被简单地忽略!