Работа с continue в Python: пропуск шагов цикла и управление потоком

Раздел: Основы Python -> Управление потоком

Оператор continue в Python: основной принцип

Оператор continue используется в циклах for и while для немедленного перехода к следующей итерации, пропуская оставшийся код в текущей итерации. Это позволяет пропускать элементы или ситуации без полного выхода из цикла (как при break).

Основное применение - фильтрация данных внутри цикла. Например, вывод только чётных чисел:


numbers = [1, 2, 3, 4, 5, 6]
for n in numbers:
    if n % 2 != 0:
        continue
    print(n)

Python continue (оператор continue в python)

2
4
6

Здесь continue пропускает нечётные числа, и выводятся только чётные.

Типичная ошибка - забыть обновить счётчик в цикле while при использовании continue. Это приводит к бесконечному циклу:


i = 0
while i < 10:
    if i % 2 == 0:
        continue  # i не увеличивается, цикл зацикливается
    print(i)
    i += 1

Решение - увеличивать счётчик перед continue или убедиться, что все пути ведут к инкременту.

Как пропустить нежелательные элементы, не выходя из цикла?

Использование continue с условным оператором if. Этот вариант подходит для любых проверок (чётность, наличие в списке, тип данных).


items = [1, 'a', 2, 'b', 3]
for item in items:
    if isinstance(item, str):
        continue
    print(item)
1
2
3

Проблема: сложный код внутри условия может затруднить чтение. Рекомендуется выносить проверку в отдельную функцию.

Как применить continue во вложенных циклах?

continue действует только на текущий (самый внутренний) цикл. Чтобы пропустить итерацию внешнего цикла, нужно использовать флаги или перенести логику.


for i in range(3):
    for j in range(3):
        if i == j:
            continue
        print(f"i={i}, j={j}")
i=0, j=1
i=0, j=2
i=1, j=0
i=1, j=2
i=2, j=0
i=2, j=1

Ошибка: попытка пропустить внешнюю итерацию через continue внутри вложенного цикла не сработает - для этого нужно использовать break с дополнительными условиями или конструкцию for-else.

Как избежать бесконечного цикла при использовании continue в while?

Перед вызовом continue необходимо убедиться, что условие цикла изменится. Самый безопасный способ - обновлять счётчик или состояние сразу после проверки, но до continue.


i = 0
while i < 10:
    i += 1  # увеличение первым делом
    if i % 2 == 0:
        continue
    print(i)
1
3
5
7
9

Если счётчик расположить после continue, цикл может стать бесконечным при срабатывании условия. Всегда проверять порядок операций.

Как работает continue в сочетании с блоком else цикла?

Блок else выполняется, если цикл завершился без break. continue не прерывает цикл, поэтому else выполняется после нормального завершения.


for i in range(5):
    if i == 3:
        continue
    print(i)
else:
    print("Цикл завершён без break")
0
1
2
4
Цикл завершён без break

Это позволяет, например, проверять, были ли пропущены какие-то элементы, без досрочного выхода.

Путаница: если внутри цикла есть break, else не выполнится. continue такого эффекта не имеет.

Как использовать continue с обработкой исключений?

Если внутри цикла ожидается исключение в некоторых итерациях, можно поместить try-except и в блоке except вызвать continue, чтобы пропустить ошибочный элемент.


data = ['10', 'abc', '20', '30']
for item in data:
    try:
        value = int(item)
    except ValueError:
        continue  # пропускаем строки, не являющиеся числами
    print(value * 2)
20
40
60

Ошибка: размещение continue внутри блока finally может привести к запутанному поведению. Лучше ставить continue только в except или после обработки всех исключений.

Расширенные примеры использования continue

Пропуск итераций при обходе словаря

При переборе пар ключ-значение можно пропускать определённые ключи с помощью continue.

Пример

person = {'name': 'Alex', 'age': 30, 'city': 'Moscow', 'job': 'Developer'}
for key, value in person.items():
    if key.startswith('c'):
        continue
    print(f"{key}: {value}")
name: Alex
age: 30
job: Developer

Пропуск пустых строк при чтении файла

Часто требуется обработать только непустые строки из файла. continue упрощает код.

Пример

line_data = ["строка1", "", "строка2", "   ", "строка3"]
for line in line_data:
    if not line.strip():
        continue
    print(line.upper())
СТРОКА1
СТРОКА2
СТРОКА3

Комбинирование continue и break

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

Пример

numbers = [1, -1, 2, -2, 0, 3, -3]
for n in numbers:
    if n == 0:
        break
    if n < 0:
        continue
    print(n)
1
2

Цикл прерывается при встрече 0, перед этим пропуская отрицательные числа.

Использование continue в генераторах (функциях-генераторах)

Генераторы тоже поддерживают continue для пропуска значений, которые не нужно выдавать.

Пример

def even_squares(limit):
    for x in range(limit):
        if x % 2 != 0:
            continue
        yield x ** 2

for val in even_squares(10):
    print(val)
0
4
16
36
64

Пропуск итераций с помощью continue в списковом включении (аналог)

В списковом включении continue не используется, но можно добиться того же эффекта с помощью условной фильтрации.

Пример

numbers = [1, 2, 3, 4, 5, 6]
# Аналог: пропустить все, кроме чётных
result = [n for n in numbers if n % 2 == 0]
print(result)
[2, 4, 6]

Это компактнее, чем цикл с continue, но менее гибко при сложной обработке.

Пропуск итерации с условием на основе внешнего счётчика

Иногда нужно пропустить каждую N-ю итерацию.

Пример

counter = 0
for i in range(10):
    counter += 1
    if counter % 3 == 0:
        continue
    print(i, end=' ')
0 1 3 4 6 7 9

Вывод: пропущены значения 2, 5, 8 (каждое третье число).

continue в цикле по элементам с проверкой допустимости

Например, проверка, что значение удовлетворяет нескольким критериям.

Пример

users = [
    {'name': 'Alice', 'age': 25, 'active': True},
    {'name': 'Bob', 'age': 17, 'active': True},
    {'name': 'Charlie', 'age': 30, 'active': False},
]
for user in users:
    if user['age'] < 18:
        continue
    if not user['active']:
        continue
    print(user['name'])
Alice

Пропускаются несовершеннолетние и неактивные пользователи.

Оператор continue в Python - comments

En
Python continue (python)