Python: уроки, справочник и задачи

break и continue в Python: управление циклами

Раздел: Основы Python · Обновлено 31.10.2026

Операторы break и continue в Python меняют ход цикла: первый досрочно завершает его, второй пропускает остаток текущего шага и переходит к следующему. Ниже оба оператора показаны в циклах for и while, рядом разобраны pass, блок else у цикла и выход из вложенных циклов. Для каждого примера приведен результат выполнения.

Операторы break и continue
Содержание статьи
  1. Оператор break: досрочный выход из цикла
    1. Цикл while True с выходом по условию
  2. Оператор continue: пропуск текущего шага
    1. Ловушка continue в цикле while
  3. Отличия break, continue и pass
  4. Блок else у цикла
  5. Выход из вложенных циклов
  6. Частые вопросы
    1. Можно ли использовать break в генераторе списка?
    2. Плохой ли стиль писать while True с break?
    3. Как прервать цикл по нажатию Ctrl+C?
    4. Где потренироваться?

Оператор break: досрочный выход из цикла

Когда интерпретатор встречает break, он немедленно завершает ближайший цикл, в котором находится оператор. Оставшиеся шаги не выполняются, программа продолжает работу со строки после цикла. Обычно break стоит внутри if: цикл идет, пока не выполнится нужное условие.

for ch in "string":
    if ch == "n":
        break
    print(ch)
print("Встретили n, цикл остановлен")

# s
# t
# r
# i
# Встретили n, цикл остановлен

Буквы n и g не напечатаны: на n сработал break, и до g цикл не дошел. Типичные задачи для этого оператора: найти первый подходящий элемент, остановиться на ошибке в данных, прекратить чтение файла после нужной строки.

Цикл while True с выходом по условию

Если заранее неизвестно, сколько раз выполнится цикл, пишут бесконечный цикл while и выходят из него через break. Так удобно запрашивать ввод, пока пользователь не напишет нужное значение.

total = 0
while True:
    line = input("Число или пустая строка для выхода: ")
    if line == "":
        break
    total += int(line)
print("Сумма:", total)

Оператор continue: пропуск текущего шага

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

for ch in "string":
    if ch == "n":
        continue
    print(ch, end=" ")

# s t r i g

Буква n пропущена, а g напечатана: цикл дошел до конца строки. Оператор удобен как фильтр, он позволяет не вкладывать основной код в лишний уровень if.

orders = [120, -5, 0, 300, 75]
for amount in orders:
    if amount <= 0:
        continue          # битые записи пропускаем
    print(f"Обработан заказ на {amount} руб.")

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

Если счетчик увеличивается в конце тела цикла, а continue стоит выше, счетчик на этом шаге не изменится, и цикл станет бесконечным. Изменяйте переменную цикла до continue.

i = 0
while i < 10:
    i += 1                # увеличиваем сразу, до continue
    if i % 3:
        continue
    print(i, end=" ")

# 3 6 9

Отличия break, continue и pass

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

ОператорЧто делаетГде допустим
breakЗавершает ближайший цикл целикомТолько внутри for или while
continueПереходит к следующему шагу циклаТолько внутри for или while
passНичего, заглушкаВ любом блоке

Вызов break или continue вне цикла приводит к SyntaxError еще до запуска программы. Внутри функции, вызванной из цикла, они тоже не работают: из функции нужно вернуть значение через return, а решение о выходе принять уже в цикле.

def not_ready_yet():
    pass                  # тело допишем позже

for name in ["Вася", "Дима", "Настя"]:
    pass                  # пустой цикл, ошибки нет

Блок else у цикла

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

def is_prime(n):
    if n < 2:
        return False
    for d in range(2, int(n ** 0.5) + 1):
        if n % d == 0:
            break         # нашли делитель
    else:
        return True       # делителей не было
    return False

print([x for x in range(20) if is_prime(x)])
# [2, 3, 5, 7, 11, 13, 17, 19]

Название else здесь сбивает с толку, ветку удобно читать как "если не было break". Оператор continue на нее не влияет. Если break выполнен внутри блока try, код из finally все равно отработает перед выходом из цикла.

Выход из вложенных циклов

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

  1. Вынести циклы в функцию и выйти через return. Это самый читаемый вариант.
  2. Завести флаг и проверять его во внешнем цикле.
  3. Заменить вложенные циклы одним, перебирая пары через itertools.product().
def find_pair(nums, target):
    for i, a in enumerate(nums):
        for b in nums[i + 1:]:
            if a + b == target:
                return a, b   # выходим сразу из обоих циклов
    return None

print(find_pair([3, 8, 1, 5, 7], 12))  # (5, 7)

В версии с флагом после внутреннего цикла пишут if found: break. Это работает, но на каждом уровне вложенности добавляется по одной проверке, поэтому при глубине больше двух лучше функция. Больше примеров с циклами есть в статье про цикл for, а применить оба оператора на практике можно в игре "Угадай число".

Частые вопросы

Ответы на вопросы, которые часто возникают при работе с этими операторами.

Можно ли использовать break в генераторе списка?

Нет, внутри list comprehension допускаются только выражения, а break это оператор. Если нужно остановиться на условии, используйте обычный цикл или itertools.takewhile().

Плохой ли стиль писать while True с break?

Нет, это обычный прием для циклов с проверкой в середине, например при чтении ввода. Главное, чтобы условие выхода было одно-два и легко находилось в коде.

Как прервать цикл по нажатию Ctrl+C?

Нажатие Ctrl+C выбрасывает исключение KeyboardInterrupt. Оберните цикл в try и обработайте его в except KeyboardInterrupt, чтобы корректно завершить работу, например сохранить данные.

Где потренироваться?

Подборка упражнений с решениями есть на странице задачи по циклам, во многих из них нужен досрочный выход или пропуск шага.