Оператор break в Python сразу останавливает цикл for или while, и программа переходит к первой строке после него. Ставят его внутрь условия: if нашли_нужное: break. Соседний оператор continue пропускает остаток текущего шага, и цикл идёт дальше со следующего элемента.
Оба работают только с ближайшим циклом, в котором стоят. Как устроены сами циклы, мы разбирали в статье про цикл while в Python, а здесь только о том, как из них выходить.
SkillboxПрофессия «Python-разработчик»157 335 ₽10 месяцев
НетологияFullstack-разработчик на Python137 000 ₽21 месяц
GeekBrainsДО Профессия Python-разработчик149 001 ₽10 месяцев
SkillFactoryПрофессия Python-разработчик140 040 ₽10 месяцев
Академия СинергияPython-разработчик + ИИ77 900 ₽6 месяцев
ЭдюсонPython-разработчик89 919 ₽9 месяцев
Как работает break: пример с циклом for

Задача: в списке температур найти первую отрицательную и дальше не проверять. Без 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
Что здесь произошло по шагам:
- Цикл взял 3 и 7, условие не сработало, напечатал «Проверили».
- На -2 условие сработало: напечатал находку и выполнил
break. - Числа 5 и -8 цикл уже не трогал, строка
print("Проверили", t)для -2 тоже не выполнилась. - Переменная
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, и он превратится в обычную ветку условия, которая сработает на каждом неподходящем имени.
Как выйти из вложенных циклов в 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 снова хватает.
Частые ошибки с break и continue

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-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 000 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 122 226 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Профессия Python-разработчик Перейти на сайт курса | 140 040 ₽ | 3890 ₽/мес. | 10 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




