你能 "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 中的一阶决定因素。
有没有办法实现这样的东西:
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 中的一阶决定因素。