Синтаксис Python — это правила, по которым интерпретатор читает код: где кончается инструкция, что входит в блок и как можно назвать переменную. Правил немного. Блок начинается после двоеточия, а его границы задаёт отступ в четыре пробела. Одна строка обычно равна одной инструкции, комментарий пишут после #, а name и Name для Python два разных имени. Ещё 35 слов вроде if, for и class язык забрал себе, и назвать так переменную не получится.
Ниже каждое правило показано на коде, который можно запустить, и на ошибке, которую Python выдаёт при нарушении. Если вам нужен список команд, а не правила записи, загляните в статью про основные команды Python. Совсем с нуля удобнее начать с программы Hello World и ещё четырёх простых примеров.
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 месяцев
Шпаргалка по синтаксису Python в одной таблице

| Правило | Как записывается | Что будет при нарушении |
|---|---|---|
| Блок кода | Двоеточие в конце заголовка, внутри блока одинаковый отступ (по PEP 8 четыре пробела) | IndentationError |
| Конец инструкции | Перевод строки, точка с запятой не нужна | Ничего, но так не пишут |
| Длинное выражение | Перенос внутри скобок или через \ в конце строки |
SyntaxError: invalid syntax |
| Комментарий | # и текст до конца строки |
Без # текст станет кодом |
| Регистр | name, Name и NAME для Python три разных имени |
NameError |
| Имена | Буквы, цифры и _, первой цифра не бывает |
SyntaxError: invalid decimal literal |
| Ключевые слова | 35 слов заняты языком | SyntaxError: invalid syntax |
| Строки | '…', "…" или """…""" для нескольких строк |
SyntaxError: unterminated string literal |
| Логические значения | True, False и None с заглавной |
NameError |
Сами правила описаны в разделе «Лексический анализ» официальной документации Python, у неё есть русский перевод. Как оформлять код, чтобы его легко читали другие люди, говорит отдельный документ, руководство по стилю PEP 8.
Стиль Python не проверяет: код с отступом в два пробела запустится. За стилем следят линтеры и коллеги на ревью.
Отступы и двоеточие: как Python видит блоки кода
В C, Java и JavaScript блок ограничивают фигурные скобки. В Python вместо них отступ. Строка-заголовок (if, for, while, def, class) кончается двоеточием, а всё, что к ней относится, сдвигается вправо на одно и то же расстояние.
temperatures = [18, 25, 31]
for t in temperatures:
if t > 30:
print(t, "— жарко")
else:
print(t, "— нормально")
print("Проверка закончена")
Вывод:
18 — нормально
25 — нормально
31 — жарко
Проверка закончена
Строки с отступом в четыре пробела относятся к for. Строки с отступом в восемь принадлежат if или else. Последний print стоит у левого края, поэтому выполняется один раз, когда цикл закончился. По той же схеме записываются цикл while и функции через def.
Сколько пробелов ставить
Языку важно одно: внутри блока отступ одинаковый. PEP 8 советует четыре пробела на уровень и пробелы вместо табуляции. Если в одном блоке смешать табуляцию и пробелы, Python откажется запускать файл:
if True:
a = 1
b = 2
TabError: inconsistent use of tabs and spaces in indentation
Отступы удобнее ставить в редакторе для кода, а не в Блокноте. Как выбрать такую среду, мы разобрали в сравнении IDE для Python.
Пустой блок и pass
Блок после двоеточия не может быть пустым. Если тело функции или условия вы допишете позже, поставьте туда pass: инструкция ничего не делает, зато блок перестаёт быть пустым.
def send_report():
pass
print("Функция объявлена, тело допишем позже")
Инструкции и перенос длинных строк
Инструкция кончается вместе со строкой, точка с запятой в конце не нужна. Поставить несколько инструкций в одну строку через ; можно, но PEP 8 такую запись не одобряет: составные инструкции в одной строке там названы нежелательными.
Длинное выражение переносят двумя способами. Самый удобный дают скобки: внутри круглых, квадратных и фигурных скобок строку можно разорвать где угодно. В запасе остаётся обратный слэш \ в конце строки.
total = (100
+ 250
+ 75)
print(total)
price = 1200 + \
300
print(price)
a = 1; b = 2; print(a + b)
Вывод:
425
1500
3
PEP 8 считает скобки предпочтительным способом, а слэш оставляет для редких случаев. Там же предел длины: 79 символов в строке кода и 72 в комментариях и docstring.
Без скобок и без слэша перенос ломает код. Конец строки вне скобок для Python означает конец инструкции, поэтому total = 100 + он считает оборванным выражением и сообщает SyntaxError: invalid syntax.
Комментарии и строки документации

Комментарий начинается с # и идёт до конца строки, интерпретатор его пропускает. Он может стоять на отдельной строке или после кода.
Отдельного знака для многострочного комментария в языке нет. Текст в тройных кавычках, который часто так используют, на самом деле строка. Если она стоит первой в теле функции, класса или модуля, это строка документации (docstring): Python сохраняет её в атрибут __doc__, и её показывает help().
# Считаем стоимость заказа
price = 450 # цена за штуку
count = 3
def order_total(price, count):
"""Возвращает сумму заказа без скидки."""
return price * count
print(order_total(price, count))
print(order_total.__doc__)
Вывод:
1350
Возвращает сумму заказа без скидки.
Имена переменных, регистр и ключевые слова
Переменную в Python не объявляют заранее: её создаёт первое присваивание. Имя собирают из букв, цифр и подчёркивания, цифра не может стоять первой. Длина имени не ограничена, а регистр имеет значение.
name = "Аня"
print(Name)
NameError: name 'Name' is not defined. Did you mean: 'name'?
С цифрой в начале имени ошибка другая, и новичка она сбивает с толку: Python решает, что перед ним число.
2nd_place = "Боря"
SyntaxError: invalid decimal literal
Кириллицу в именах документация тоже разрешает, цена = 100 сработает. На практике имена пишут латиницей: такой код прочитает любой разработчик.
Как называть переменные по PEP 8
- snake_case для переменных и функций:
order_total,user_name. - CapWords для классов:
OrderReport. Что такое классы, объясняем в статье про ООП простыми словами. - Заглавные с подчёркиванием для констант:
MAX_RETRIES.
35 ключевых слов, которые нельзя занимать
Эти слова язык использует сам, и назвать ими переменную не получится. Полный список стоит в разделе «Ключевые слова» документации:
False None True and as assert async
await break class continue def del elif
else except finally for from global if
import in is lambda nonlocal not or
pass raise return try while with yield
class = "9Б"
SyntaxError: invalid syntax
Есть ещё мягкие ключевые слова: match, case и _ в инструкции match, type в инструкции type и lazy перед import. Последнее появилось в Python 3.15. Вне своих конструкций это обычные имена, поэтому старый код с переменной type не сломался.
Не занимайте имена встроенных функций
Эту ошибку Python не ловит сразу. list, str, sum и input не ключевые слова, их можно перезаписать, и функция пропадёт до конца программы. Особенно обидно с sum, которой суммируют список, и с input, без которой не сделать ввод числа с клавиатуры. Вот как это выглядит на list:
list = [3, 1, 2]
numbers = list("123")
TypeError: 'list' object is not callable
Решение: переименовать переменную, например в items. Если ошибка случилась в интерактивной консоли, верните функцию командой del list.
Как записываются значения: строки, числа, True и None

Литералом называют значение, записанное прямо в коде. Тип переменной Python определяет по нему сам, указывать тип не нужно.
city = 'Казань'
quote = "Он сказал: 'привет'"
text = """Первая строка
Вторая строка"""
salary = 1_500_000
pi = 3.14
is_open = True
nothing = None
print(type(city), type(salary), type(pi), type(is_open), type(nothing))
print(salary)
print(text)
Вывод:
<class 'str'> <class 'int'> <class 'float'> <class 'bool'> <class 'NoneType'>
1500000
Первая строка
Вторая строка
- Одинарные и двойные кавычки равноправны. Удобно брать те, которых нет внутри текста.
- Тройные кавычки нужны для текста в несколько строк.
- Подчёркивание в числе ничего не меняет, только помогает читать разряды:
1_500_000равно1500000. Подробнее о целых числах рассказываем в статье про тип int. True,FalseиNoneпишутся с заглавной. СтрочноеtruePython примет за имя переменной и выдастNameError: name 'true' is not defined. Did you mean: 'True'?
Одна и та же переменная может сначала хранить число, а потом строку, это и называют динамической типизацией. Чтобы вставить значение переменной в текст, используют f-строки, а набор значений хранят в списках.
Частые синтаксические ошибки новичков
Python показывает строку с ошибкой и ставит под проблемным местом значки ^. Текст сообщения обычно прямо говорит, что не так. Ниже самые частые случаи.
| Сообщение | Что случилось | Как исправить |
|---|---|---|
IndentationError: expected an indented block after 'if' statement on line 1 |
После двоеточия нет блока с отступом | Сдвинуть тело на четыре пробела или поставить pass |
IndentationError: unexpected indent |
Отступ у строки, которой он не положен | Убрать лишние пробелы в начале строки |
TabError: inconsistent use of tabs and spaces in indentation |
В блоке смешаны табуляция и пробелы | Заменить табуляцию пробелами во всём файле |
SyntaxError: expected ':' |
Забыли двоеточие после if, for, def |
Поставить : в конце заголовка |
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? |
В условии стоит = вместо == |
Сравнивать через == |
SyntaxError: '(' was never closed |
Не закрыта скобка | Найти пару для каждой открывающей скобки |
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? |
Код из учебника по Python 2 | Писать print("Hello") со скобками |
Разница между = и == и остальные знаки разобраны в статье про операторы Python.
Закрепить правила проще всего на практике: возьмите 30 задач по 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




