如何检查 Python 中的 for 循环是否中断



有没有Pythonic方法可以知道for循环是否中断?

我有一个非常大的列表,有 100 000 条记录。我想遍历所有列表项,但我想知道是否由于某种原因(例如:如果电源没电,如果电池因任何其他原因没电了(循环被中断并且没有到达列表的末尾。

因此,例如,如果我有如下列表:

some_list = ["item1", "item2", "item3", "item4", "item5"]
for item in some_list:
# If it came to item3 and it's interrupted. How can I know that?
print(item)

在python中,你可以使用for/else语句。您可以在 for 循环后添加 else 语句,如果未调用 break,则将触发else 语句。

您可以使用它来设置 for 循环完成的标志。

例:

for i in range(10)
if i == 10:
break
else:
print('the for loop ran without breaking')

上面的代码将打印文本"for 循环运行而不中断",而下面的代码不会。

for i in range(10)
if i == 5:
break
else:
print('the for loop ran without breaking')

例如:如果电源消失了:

处理此问题的唯一方法是定期将循环的状态写入永久存储。

您可以继续将当前正在处理的项目写入文件。

然后,您可以检查该文件以查看它是否在计算机重新启动后到达最后一个元素。

像这样:

file_path = 'some_file_path'
with open(file_path, 'a') as progress_file:
some_list = ["item1", "item2", "item3", "item4", "item5"]
for item in some_list:
progress_file.write(item + 'n')

您可以在列表中enumerate,然后检查应等于len(the_list) - 1的索引。

for idx, el in enumerate(the_list):
# todo
if idx != len(the_list)-1:
print('Interrupted')

你对什么是中断有误解。中断用于向程序发出信号。它们是您计划的一部分。

由于某种原因,您所说的断电或程序崩溃是指灾难情况。唯一的方法是使用标志,该标志需要位于永久介质(如磁盘、数据库等(上,以防发生不良情况。

使用for/elsebreak语句在这里不起作用;如果循环正在运行并且电源关闭,代码将无法到达那里。

with open('filename.txt', 'w', bufsize=0) as f:       
f.write('in progress')
some_list = ["item1", "item2", "item3", "item4", "item5"]
for item in some_list:
# If it came to item3 and it's interrupted. How can I know that?
print(item)
f.write('done')

上面的代码将签署它启动的文件 -正在进行- 并在完成后签署另一个标志。如果您只看到第一个标志,则循环从未按预期完成。

Bufsize参数使缓冲区立即刷新。 0 表示无缓冲,1 表示行缓冲,任何其他正值表示使用(大约(该大小的缓冲区。

试试这个,如果循环中断,它将打印'interrupted'

some_list = ["item1", "item2", "item3", "item4", "item5"]
try:
for item in some_list:
print(some_list[some_list.index(item)+1])
except:
print('interrrupted')

使用额外的变量可以实现这一点:

some_list = ["item1", "item2", "item3", "item4", "item5"]
flag = False
for item in some_list:
# If it came to item3 and it's interrupted. How can I know that?
if item==some_list[2]:
flag=True
break

检查变量flag值,您可以检查循环是否中断。 注意:你可以在 Python 中使用 for/else 语句:

some_list = ["item1", "item2", "item3", "item4", "item5"]
for item in some_list:
# If it came to item3 and it's interrupted. How can I know that?
if item==some_list[2]:
break
else: #this block will execute if your loop ends without interruption
print("The loop completed without any interruption)

最新更新