有没有办法实现这样的事情:
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
您可以将行设置为迭代器,并且仅在没有错误时才前进。
it = iter(rows)
row = next(it,"")
while row:
try:
something
row = next(it,"")
except:
continue
顺便说一句,如果您还没有捕获特定的错误,那么您不想捕获所有内容。
如果您有 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
虽然我不建议这样做,但唯一的方法是创建一个 While (True) 循环,直到它完成。
请记住无限循环的可能性。
something
for row in rows:
try:
something
except:
flag = False
while not flag:
try:
something
flag = True
except:
pass
while True:
for row in rows:
if(condition)
.....
if(condition)
break
if(condition)
break
参数控制尝试次数:
max_retry
def do_something(retry=0, max_retry=4):
try:
print('something')
except Exception as e:
if retry == max_retry:
print(f"Max retries reached!")
raise e
do_something(retry=retry + 1, max_retry=max_retry)
do_something()
it = iter(rows)
while True:
try:
something
row = next(it)
except StopIteration:
it = iter(rows)
是一个列表,你可以做
rows
此外,在其他条件相同的情况下,Python 中的 for 循环比 while 循环更快。话虽这么说,性能并不是 Python 中的一阶决定因素。
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
而不是
continue
,因为它将确保重新启动 pass
循环。while True
我将为 Python 新用户解释一下:
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
循环中。然后它继续下一次迭代,因为它没有什么可做的。