有没有办法实现这样的事情:
for row in rows:
try:
something
except:
restart iteration
答案 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 中的首要决定因素。