В f-строке Python фигурные скобки {} — это спецсимвол: место, куда подставляется значение переменной. Поэтому, чтобы вывести саму фигурную скобку как символ, её нужно экранировать — удвоить. Разберём, как это работает и где та же логика встретится снова.
Коротко
Чтобы вывести фигурную скобку в f-строке, удвой её: {{ даёт {, а }} даёт }. Одиночные {} Python воспринимает как подстановку и попытается найти внутри выражение.
print(f"{{}}")
print(f"Множество: {{1, 2, 3}}"){}
Множество: {1, 2, 3}Почему одиночные скобки не работают
Внутри f-строки одиночные {...} — это инструкция «вычисли выражение и вставь результат». Если написать f"{}", Python решит, что внутри должно быть выражение, не найдёт его и выдаст синтаксическую ошибку. Удвоенные {{ и }} говорят интерпретатору: «это не подстановка, а сам символ скобки».
Скобку-литерал можно совмещать с обычной подстановкой:
value = 42
print(f"Значение {{в скобках}}: {value}")Значение {в скобках}: 42Здесь {{в скобках}} вывелось как текст {в скобках}, а {value} — как подстановка 42. Про сами f-строки и подстановку выражений — в гайде f-строки в Python: форматирование строк просто и читаемо.
Где та же логика встретится снова
Точно то же правило действует в методе str.format(): там {} — это тоже место для подстановки, а {{ и }} выводят литеральные скобки. Это особенно важно, когда формируешь текст с фигурными скобками внутри: JSON, CSS-правила, шаблоны кода.
name = "Барсик"
print(f'{{"cat": "{name}"}}'){"cat": "Барсик"}Внешние {{ и }} дали литеральные скобки JSON, а {name} подставил значение. Строки как тип данных и их особенности — в гайде Типы данных в Python: полный гайд для начинающих.
Когда экранировать не нужно
В обычной строке (без префикса f и без .format()) фигурные скобки — не спецсимвол. Там {} пишутся как есть, удваивать не надо. Экранирование через {{ }} нужно только в f-строках и в str.format().
print("Обычная строка с {} — без экранирования")Обычная строка с {} — без экранированияКороткие ответы на вопросы
Как вывести фигурную скобку в f-строке?
Удвой её: {{ для открывающей и }} для закрывающей. Например, f"{{}}" выведет {}.
Работает ли это в .format()?
Да, правило то же: в str.format() одиночные {} — подстановка, а {{ и }} — литеральные скобки.
Нужно ли экранировать скобки в обычной строке?
Нет. В строке без f и без .format() фигурные скобки — обычные символы, их пишут как есть.
Кот-наставник— Правило на пальцах: в f-строке одна скобка — это «вставь значение», двойная — «покажи саму скобку».
— Формируешь JSON или CSS в f-строке? Все литеральные скобки удваивай, а подстановки оставляй одинарными.
f-строки чувствуются на практике
На SkillPy ты пишешь форматирование сам, а AI-наставник сразу показывает, где скобка — подстановка, а где — литерал, и почему строка не собирается. Он понимает твой код, а не сверяет с шаблоном.
