Условная инструкция if и else
Уроки курсаУсловная инструкция if и else
Типичные ошибки при написании if/else
Когда конструкция if/else уже написана и понята в теории, на практике сразу встречаются две ошибки — они случаются чаще всего и обе приводят к тому, что код не запускается вообще.
Пропущенное двоеточие
После условия if и после слова else обязательно стоит двоеточие. Если его забыть — Python выбросит SyntaxError ещё до запуска программы.
# Ошибка: нет двоеточия после условия
age = 20
if age >= 18
print('Совершеннолетний')
# SyntaxError: expected ':'
# Исправленный вариант
age = 20
if age >= 18:
print('Совершеннолетний')
else:
print('Несовершеннолетний')
Ошибка одинаково возникает и после if, и после else — двоеточие обязательно в обоих местах. Редакторы вроде VS Code или PyCharm обычно подчёркивают такую строку красным сразу, не дожидаясь запуска.
Неверный отступ в теле блока
Вторая ошибка — когда строки внутри блока if или else стоят не на том уровне. Python в этом случае выбрасывает IndentationError.
# Ошибка: тело if не сдвинуто
age = 20
if age >= 18:
print('Совершеннолетний') # нет отступа
# IndentationError: expected an indented block
# Ошибка: непоследовательный отступ внутри блока
if age >= 18:
print('Проверка пройдена')
print('Совершеннолетний') # 2 пробела вместо 4
# IndentationError: unindent does not match any outer indentation level
Отдельный случай — смешивание табуляции и пробелов. Визуально строки выглядят одинаково выровненными, но Python различает эти символы:
if age >= 18:
print('Таб') # символ Tab
print('Пробелы') # 4 пробела
# IndentationError: inconsistent use of tabs and spaces in indentation
Как читать сообщения об ошибках
Оба типа ошибок — SyntaxError и IndentationError — всегда указывают номер строки, где Python споткнулся. Это не всегда та строка, где ошибка допущена: например, если пропустить двоеточие в if, интерпретатор может указать на следующую строку. Поэтому при SyntaxError стоит смотреть на строку выше указанной — там обычно и живёт пропущенное двоеточие.
При IndentationError сообщение чуть точнее: Python называет конкретный тип проблемы — expected an indented block (блок вообще не начат), unindent does not match (отступ не совпадает ни с одним уровнем) или inconsistent use of tabs and spaces (смешаны символы). Ориентируясь на эти формулировки, можно сразу понять, что именно исправлять.
