你可以重启" Python循环的当前迭代?

时间:2015-04-21 15:30:34

标签: python for-loop iteration

有没有办法实现这样的事情:

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

6 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:4)

你可以使行成为迭代器,只有在没有错误时才会前进。

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

另一方面,如果你还没有,我会在其他方面发现具体的错误/错误,你不想抓住一切。

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

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

答案 2 :(得分:3)

虽然我不推荐这样做,但实现此目的的唯一方法是制作一个While(True)循环,直到它完成something

请记住无限循环的可能性。

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

答案 3 :(得分:1)

让你的for循环进入无限循环。使用if else条件检查要重新启动for循环的条件并中断内循环。在while循环中有一个if条件,它在for循环外面以打破while循环。 像这样:

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

答案 4 :(得分:0)

尝试一下

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

答案 5 :(得分:0)

我的 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 中的首要决定因素。