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 шт):

Автор решения: ioprst

Вы можете использовать флаг, чтобы выйти из первого цикла. Если создали файл, установите флаг в 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
→ Ссылка
Автор решения: CrazyElf

У вас цикл в цикле, поэтому по 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
→ Ссылка