有没有办法实现类似这样的东西:
for row in rows:
try:
something
except:
restart iteration
try/except
块放在另一个循环中,当它成功时跳出循环:for row in rows:
while True:
try:
something
break
except Exception: # Try to catch something more specific
pass
something
。其余的代码将放在 while 循环下,直到 while 循环退出才会执行。 - user2555451it = iter(rows)
row = next(it,"")
while row:
try:
something
row = next(it,"")
except:
continue
顺便提一下,如果你还没有这样做的话,我建议在except中捕获特定的错误/异常,你不想抓取所有的错误。
如果你有虚假值,你可以将对象作为默认值:
it = iter(rows)
row, at_end = next(it,""), object()
while row is not at_end:
try:
something
row = next(it, at_end)
except:
continue
while True:
的答案更清晰。 - kratenkosomething
。请注意可能出现无限循环的情况。for row in rows:
try:
something
except:
flag = False
while not flag:
try:
something
flag = True
except:
pass
将您的for循环放在一个无限的while循环内。使用if else条件检查您想要重新启动for循环的条件,并中断内部循环。在for循环之外的while循环内有一个if条件来中断while循环。 像这样:
while True:
for row in rows:
if(condition)
.....
if(condition)
break
if(condition)
break
max_retry
参数来控制尝试次数。def do_something(retry=0, max_retry=4):
print(f"retry: {retry}, max_retry: {max_retry}")
try:
raise Exception
except Exception as e:
if retry == max_retry:
print(f"Max retries reached!")
else:
do_something(retry=retry + 1)
do_something()
试试这个
it = iter(rows)
while True:
try:
something
row = next(it)
except StopIteration:
it = iter(rows)
我的意见是,如果rows
是一个列表,你可以这样做
for row in rows:
try:
something
except:
# Let's restart the current iteration
rows.insert(rows.index(row), row)
continue # <-- will skip `something_else`, i.e will restart the loop.
something_else
此外,其他条件相同时,Python 中的 for 循环比 while 循环更快。话虽如此,在 Python 中,性能并不是第一顺位的决定因素。
我认为user2555451的回答已经很好了。话虽如此,你应该使用continue
而不是pass
,因为它会确保while True
循环重新启动。
for row in rows:
while True:
try:
...
break
except Exception:
continue
break 仅中断您正在使用的循环。 因此,如果您有像这样的东西:(变量和函数是虚构的)
for x in imgWidth:
for y in imgHeight:
if ...:
break
drawPixel(x, y, "#FF0000")
如果你想跳过一个像素,可以使用break
来退出循环并返回到上一级。同样的,continue
也是如此。
现在回到例子:
for row in rows:
while True:
try:
...
break
except Exception:
continue
将您想要运行的任何代码移动到try
块内。它会尝试执行,如果捕获到错误,它将重试,因为我们使用continue
继续while True
循环!当最终无错误地执行代码时,它会break
并回到for
循环中。然后,它会继续下一次迭代,因为没有剩余任务可做。
redo
吗?我认为Python中没有这样的东西。 - kratenko