Python 3.14+Строки (str)конструкция
t-строки
форматирование
t'...' выглядит как f-строка, но даёт объект Template, а не str: части текста и подставленные значения хранятся раздельно (Python 3.14+).
Синтаксис
t'текст {выражение}'
T"текст {выражение!r:формат}"
Главная ловушка: t-строка — не str. Она не равна строке с тем же текстом (сравнение даёт False) и не склеивается со str через + (TypeError), а str(tpl) даёт repr шаблона, а не готовый текст. Собирает строку ваш код: перебирает шаблон, получая куски текста и объекты Interpolation, и, например, экранирует значения для HTML или SQL. Нужна просто строка — берите f-строку.
Примеры
# Python 3.14+
name = 'Bob'
tpl = t'Hi {name}!'
print(type(tpl).__name__) # → Template
print(tpl.strings, tpl.values) # → ('Hi ', '!') ('Bob',)
print(tpl == 'Hi Bob!') # → False
print(str(tpl)[:9]) # → Template( — repr шаблона, а не текст
tpl + '?' # → TypeError
# Python 3.14+
from string.templatelib import Interpolation
name = '<b>'
tpl = t'Hi {name}!'
parts = []
for part in tpl:
if isinstance(part, Interpolation):
part = str(part.value).replace('<', '<').replace('>', '>')
parts.append(part)
print(''.join(parts)) # → Hi <b>!
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности