Глава 9 · Выполняй мою команду!

Отладка логических ошибок

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

Логическая ошибка — это не ошибка Python

Программа if age > 18: выполняется прекрасно и не выдаёт никакой ошибки. Но если по условию задачи «доступ с 18 лет включительно», это — логическая ошибка: Python не может знать, что вы имели в виду.

Тип ошибкиЧто происходитПример
SyntaxErrorPython не может даже начать выполнение кодаif age >= 18 (забыто двоеточие)
Runtime-ошибкапрограмма стартует, но падает на серединеage_text + 5 (str + int)
Логическая ошибкапрограмма выполняется успешно, но результат неверныйif age > 18 вместо >=

Метод отладки условий

Когда результат условия кажется неправильным, не гадайте — выведите промежуточные значения:

1. printзначенияage, has_ticket2. print условиеage >= 18 andhas_ticket3. границы17, 18, 194. упроститьразбить на части5. поотдельностикаждое под-условие
Метод отладки условий — от вывода значений до проверки каждой части отдельно
otladka_uslovij.py
age = 20
has_ticket = False
eligible = age >= 18 and has_ticket

print("age >= 18:", age >= 18)
print("has_ticket:", has_ticket)
print("eligible:", eligible)
# age >= 18: True
# has_ticket: False
# eligible: False

Разбив сложное условие на части и выведя каждую отдельно, сразу видно, ЧТО именно сделало итог ложным.

Называйте логические переменные осмысленно

Хорошее имяПлохое имя
is_readyflag1
has_ticketthing
can_entervalue2
needs_updatex

Приставки is_, has_, can_, needs_ — не обязательный синтаксис, а полезное соглашение: сразу видно, что переменная хранит True/False.

Сохраняйте сложное условие в переменную

imenovannoe_uslovie.py
can_enter = age >= 18 and has_ticket

if can_enter:
    print("Проходите")

can_enter читается сразу — не нужно заново разбирать выражение age >= 18 and has_ticket каждый раз, когда вы возвращаетесь к этому коду.

ЧУТЬ ГЛУБЖЕ — условное выражение
После того как if/else хорошо усвоен, полезно знать компактную форму для ПРОСТОГО выбора значения: status = "adult" if age >= 18 else "minor". Это не замена обычному if/else — только удобство для одной строки.
match/case — на будущее
В Python есть и структурное сопоставление match/case для некоторых многовариантных ситуаций. Мы изучим его подробно позже — сейчас достаточно знать, что оно существует.
Практика: отладка логических ошибок
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →