break в Python: как выйти из цикла и чем он отличается от continue

break в Python сразу завершает цикл for или while, continue пропускает текущий шаг, а pass ничего не делает.

Разбираем все три на примерах с выводом, показываем четыре способа выйти из вложенных циклов, else у цикла и ошибки вроде «'break' outside loop» и предупреждения в блоке finally.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3119 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3773 экспертных мнения Подписаться на Телеграм-канал
Обложка: break в Python: как выйти из цикла и чем он отличается от continue

Оператор break в Python сразу останавливает цикл for или while, и программа переходит к первой строке после него. Ставят его внутрь условия: if нашли_нужное: break. Соседний оператор continue пропускает остаток текущего шага, и цикл идёт дальше со следующего элемента.

Оба работают только с ближайшим циклом, в котором стоят. Как устроены сами циклы, мы разбирали в статье про цикл while в Python, а здесь только о том, как из них выходить.

Как работает break: пример с циклом for

Рой за ноутбуком останавливает цикл в коде Python

Задача: в списке температур найти первую отрицательную и дальше не проверять. Без break цикл пройдёт весь список до конца, даже если ответ нашёлся на третьем элементе.

temps = [3, 7, -2, 5, -8]
for t in temps:
    if t < 0:
        print("Первая отрицательная:", t)
        break
    print("Проверили", t)
print("После цикла t =", t)

Вывод:

Проверили 3
Проверили 7
Первая отрицательная: -2
После цикла t = -2

Что здесь произошло по шагам:

  1. Цикл взял 3 и 7, условие не сработало, напечатал «Проверили».
  2. На -2 условие сработало: напечатал находку и выполнил break.
  3. Числа 5 и -8 цикл уже не трогал, строка print("Проверили", t) для -2 тоже не выполнилась.
  4. Переменная t после цикла хранит -2, то значение, на котором случился выход.

Последний пункт закреплён в справочнике языка: если цикл for завершён через break, управляющая переменная сохраняет текущее значение. Этим удобно пользоваться при поиске, отдельная переменная для результата не нужна.

break в цикле while True

У while True условие никогда не становится ложным, поэтому break здесь единственный нормальный выход. Так пишут меню, чат-боты и циклы ввода: программа крутится, пока пользователь не попросит остановиться.

while True:
    command = input("Команда: ")
    if command == "стоп":
        break
    print("Выполняю:", command)
print("Программа завершена")

Так это выглядит в терминале, если ввести «привет», «пока» и «стоп»:

Команда: привет
Выполняю: привет
Команда: пока
Выполняю: пока
Команда: стоп
Программа завершена

Если вводите числа, а не слова, сначала проверьте, что строка вообще превращается в число. Как это сделать без падения программы, показали в разборе int(input()) в Python.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

continue: как пропустить итерацию цикла

continue говорит: «с этим элементом всё, бери следующий». Код ниже него в теле цикла на текущем шаге не выполняется, но сам цикл продолжается. В учебнике Python это сформулировано так: инструкция continue переходит к следующей итерации цикла.

Пример: посчитать сумму заказов, пропустив нулевые и ошибочные отрицательные суммы.

orders = [1200, 0, 540, -1, 3100]
total = 0
for amount in orders:
    if amount <= 0:
        continue
    total += amount
print("Сумма заказов:", total)
Сумма заказов: 4840

Ту же задачу можно решить без continue, через if amount > 0: total += amount. Разница в читаемости: когда отсеивающих условий три-четыре, ранний continue в начале тела избавляет от лесенки вложенных if.

Ловушка continue в цикле while

В while счётчик обновляете вы сами. Если continue стоит раньше строки i += 1, счётчик перестаёт расти и цикл не закончится никогда. Как остановить уже зависшую программу и почему так выходит, разобрали в разделе про бесконечный цикл while True.

Решение: обновлять счётчик в начале тела, до любого continue.

i = 0
while i < 5:
    i += 1
    if i == 3:
        continue
    print(i)
1
2
4
5

Чем break отличается от continue и pass

Три дорожки с шагами: пройти до конца, пропустить шаг и выйти

Третий оператор из этой компании, pass, к управлению циклом вообще не относится, хотя в списках основных команд Python их обычно ставят рядом. Он ничего не делает и нужен там, где синтаксис требует строку кода, а писать пока нечего: пустая функция, заготовка класса, ветка if на потом.

Оператор Что делает с циклом Когда нужен
break Завершает ближайший цикл целиком Нашли нужное, дальше искать незачем
continue Пропускает остаток текущего шага Элемент не подходит, берём следующий
pass Ничего, выполнение идёт дальше по строкам Заглушка, где Python требует тело блока

Разницу видно, если поставить pass и continue в одинаковые циклы:

for n in range(4):
    if n == 2:
        pass
    print("pass:", n)

for n in range(4):
    if n == 2:
        continue
    print("continue:", n)
pass: 0
pass: 1
pass: 2
pass: 3
continue: 0
continue: 1
continue: 3

С pass двойка напечаталась, с continue её пропустили.

else у цикла: что будет, если break не сработал

У for и while в Python может быть ветка else. Она выполняется, когда цикл дошёл до конца сам, и пропускается, если его прервал break. Так описано в разделе учебника про else в циклах.

Главный сценарий для такой ветки: поиск, у которого есть ответ «не нашли».

users = ["anna", "oleg", "ivan"]
for name in users:
    if name == "petr":
        print("Нашли")
        break
else:
    print("Такого пользователя нет")
Такого пользователя нет

Без else пришлось бы заводить флаг found = False, менять его внутри цикла и проверять после. Следите за отступом: else стоит на уровне for, а не if. Сдвинете на уровень if, и он превратится в обычную ветку условия, которая сработает на каждом неподходящем имени.

CheckroiCheckroiПодборка курсов по Python569 курсов • 52 школыСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как выйти из вложенных циклов в Python

break завершает только тот цикл, в котором написан. Во вложенной конструкции внешний цикл после него спокойно идёт дальше:

for row in range(1, 4):
    for col in range(1, 4):
        if col == 2:
            break
        print(row, col)
1 1
2 1
3 1

Внутренний цикл трижды прервался на col == 2, а внешний прошёл все три строки. Синтаксиса вроде break 2 или меток, как в Java и PHP, в Python нет: PEP 3136 с таким предложением отклонён. Поэтому выйти из обоих циклов можно одним из четырёх способов. Во всех примерах ищем число target = 9 в таблице matrix = [[1, 4, 7], [2, 9, 3], [5, 6, 8]].

Флаг

found = False
for i, row in enumerate(matrix):
    for j, value in enumerate(row):
        if value == target:
            found = True
            break
    if found:
        break
print("Флаг:", i, j)
Флаг: 1 1

Самый понятный вариант для новичка, но на каждый уровень вложенности нужен свой if found: break. Про enumerate(), который здесь отдаёт номер строки и столбца, есть отдельная инструкция.

Функция и return

return выходит из функции сразу, сколько бы циклов ни было внутри. Из четырёх способов этот я советую первым: поиск получает имя, и его можно вызвать из любого места программы.

def find(matrix, target):
    for i, row in enumerate(matrix):
        for j, value in enumerate(row):
            if value == target:
                return i, j
    return None

print(find(matrix, 9))
print(find(matrix, 10))
(1, 1)
None

Как устроены def и return, разобрали в статье про функции в Python.

else и continue

for i, row in enumerate(matrix):
    for j, value in enumerate(row):
        if value == target:
            break
    else:
        continue
    break
print("else + continue:", i, j)
else + continue: 1 1

Если внутренний цикл дошёл до конца без находки, срабатывает else и continue отправляет внешний цикл на следующую строку. Если внутренний прервался, else пропускается и выполняется второй break. Работает, но читается тяжело, в рабочем коде без комментария лучше не оставлять.

Один цикл через itertools.product

from itertools import product

for i, j in product(range(3), range(3)):
    if matrix[i][j] == 9:
        break
print("product:", i, j)
product: 1 1

product склеивает два перебора в один, и обычного break снова хватает.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки с break и continue

Рой с чек-листом уверенно обходит грабли с надписью SyntaxError

break вне цикла

break стоит внутри функции или условия, а цикла вокруг нет. Python откажется запускать такой файл ещё до выполнения первой строки:

def check(x):
    if x > 10:
        break
  File "main.py", line 3
    break
    ^^^^^
SyntaxError: 'break' outside loop

Решение: чтобы выйти из функции, нужен return, а break оставьте циклам. Тот же запрет действует, если функция объявлена внутри цикла: по справочнику break нельзя ставить в определение функции или класса, вложенное в цикл.

break внутри match завершает весь цикл

В C и JavaScript break внутри switch выходит только из switch. В Python у match своего break нет, и он завершает весь цикл вокруг:

for cmd in ["start", "stop", "status"]:
    match cmd:
        case "stop":
            print("Остановка")
            break
        case _:
            print("Команда", cmd)
Команда start
Остановка

До команды «status» цикл не дошёл. Если хотели просто закончить ветку case, break там не нужен: следующие ветки Python и так не проверяет.

break в блоке finally

С Python 3.14 компилятор предупреждает, если break, continue или return выводят управление из блока finally. Причина в том, что такой выход молча глушит исключение из try. Изменение описано в PEP 765 и в списке нововведений 3.14.

for attempt in range(3):
    try:
        print("Попытка", attempt)
    finally:
        break
main.py:5: SyntaxWarning: 'break' in a 'finally' block
  break
Попытка 0

В Python 3.12 тот же код выполняется молча. Решение: вынести break за пределы finally, например после всего блока try.

Попытка написать break в генераторе списка

Внутри [x for x in data] операторы управления циклом не работают: генератор списка считается выражением, тела цикла у него нет. Если нужно «брать элементы, пока условие верно, и остановиться на первом неподходящем», есть itertools.takewhile:

from itertools import takewhile

readings = [5, 3, -1, 8]
print(list(takewhile(lambda x: x >= 0, readings)))
[5, 3]

Восьмёрка после -1 в результат не попала: на -1 перебор остановился, как от break. Набить руку на таких конструкциях помогают задачи по Python для начинающих, а про сами списки подробно рассказали в статье о списках в Python.

Где освоить Python системно

break и continue закрывают одну небольшую тему. Чтобы писать программы, а не отдельные циклы, нужны функции, работа с файлами, исключения и практика на задачах с проверкой. Обычно это и дают курсы с наставником. Ниже онлайн-курсы по Python из нашего каталога, все варианты собраны на странице курсов Python.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология137 000 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox122 226 ₽4108 ₽/мес.9 месяцевОбзор курса
Профессия Python-разработчик
Перейти на сайт курса
SkillFactorySkillFactory140 040 ₽3890 ₽/мес.10 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Чем break отличается от continue в Python?

break завершает цикл целиком, и программа переходит к строке после него. continue пропускает только остаток текущего шага, а цикл продолжается со следующего элемента.

Выходит ли break из всех вложенных циклов?

Нет, только из ближайшего цикла, внутри которого стоит. Чтобы выйти сразу из нескольких, вынесите циклы в функцию и используйте return или заведите флаг. Как устроен return, разобрали в статье про функции в Python.

Можно ли написать break в if без цикла?

Нельзя. Python не запустит такой файл и покажет SyntaxError: 'break' outside loop. Чтобы досрочно выйти из функции, нужен return.

Выполняется ли else у цикла, если сработал break?

Нет. Ветка else у for и while выполняется, только когда цикл дошёл до конца сам. Если его прервал break, она пропускается.

await тоже управляет циклом, как break и continue?

Нет. await приостанавливает сопрограмму, пока не будет готов результат, и работает только внутри async def. Внутри цикла async for обычные break и continue ведут себя так же, как в for.

Как остановить бесконечный цикл, если программа зависла?

В терминале нажмите Ctrl+C: Python прервёт выполнение исключением KeyboardInterrupt. Чтобы цикл заканчивался сам, проверьте, что условие while когда-нибудь становится ложным или внутри есть break.

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!