你能 "restart" Python 循环的当前迭代吗?

Can you "restart" the current iteration of a Python loop?

有没有办法实现这样的东西:

for row in rows:
    try:
        something
    except:
        restart iteration

虽然我不建议这样做,但唯一的方法是创建一个 While (True) 循环,直到 something 完成。

牢记无限循环的可能性。

for row in rows:
    try:
        something
    except:
        flag = False
        while not flag:
            try: 
               something
               flag = True
            except:
               pass

您可以将 try/except 块放在另一个循环中,然后在它成功时中断:

for row in rows:
    while True:
        try:
            something
            break
        except Exception: # Try to catch something more specific
            pass

您可以使行成为迭代器,并且仅在没有错误时前进。

it = iter(rows)  
row = next(it,"")
while row:
    try:
        something
        row = next(it,"")
    except:
       continue

附带说明一下,如果您还没有,我会在例外中捕获特定的 error/errors,您不想捕获所有内容。

如果您有 Falsey 值,您可以使用对象作为默认值:

it = iter(rows)
row, at_end = next(it,""), object()
while row is not at_end:
    try:
        something
        row = next(it, at_end)
    except:
        continue

将 for 循环置于无限 while 循环中。检查要使用 if else 条件重新启动 for 循环并中断内部循环的条件。在 while 循环内有一个 if 条件,它在 for 循环之外以打破 while 循环。 像这样:

    while True:
      for row in rows:
        if(condition)
        .....
        if(condition)
         break
   if(condition)
     break

试试这个

it = iter(rows)
while True:
    try:
        something
        row = next(it)        
    except StopIteration:
        it = iter(rows)

我的2¢,如果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
    

此外,在其他条件相同的情况下,for 循环比 Python 中的 while 循环更快。 话虽这么说,性能并不是 Python 中的一阶决定因素。