Python прерывание цикла по наличию файла
Пытаюсь записать результат в файл, в файле результат в виде одной строки, хочу сделать проверку Если есть файл, то выходить из цикла тем самым у меня будет один результат в файле, т.е. не отнимать время на весь перебор, может есть другое решение? Делаю так, но прерывания цикла не происходит, файл создаётся и перебор идет дальше.
for n in range(1, len(nums) + 1):
for combination in combinations(nums, n):
if sum(combination) == target:
cursor.execute(f'select number, total from docs where total in {combination}')
doc_id = cursor.fetchall()
with open('result.txt', 'w') as f:
print(str(list(sum(doc_id, ()))).replace("',","':").replace(',',';').replace('[','').replace(']',''),file=f)
if os.path.exists('result.txt'):
break
Ответы (2 шт):
Вы можете использовать флаг, чтобы выйти из первого цикла. Если создали файл, установите флаг в True. После второго цикла проверяйте флаг, если он True, делайте break из первого цикла.
Пример:
s = 0
flg = False
for i in range(5):
print(f'i = {i}')
for j in range(5):
print(f'j = {j}')
if s > 10:
flg = True
break
s += 1
if flg:
break
У вас цикл в цикле, поэтому по break вы выходите только из внутреннего цикла. Тут можно поступить по-разному. Можно оформить весь этот код в виде функции и выходить из неё по return когда вы хотите завершить перебор:
def func():
...
if ...:
return
Можно сделать булеву переменную found, устанавливать её при записи в файл и поставить проверку внутри внешнего цикла:
found = False
for n in range(1, len(nums) + 1):
if found:
break
for ...
if ...:
found = True
break
Ну или как вариант, можно перенести вашу проверку на наличие файла во внешний цикл, хотя это и не рационально - работа с файлами штука тормозная:
for n in range(1, len(nums) + 1):
if os.path.exists('result.txt'):
break