🐍 Python 3.14: cosa sono i t-string e come si usano

  

Con Python 3.14 arriva una novità importante: i t-string, una nuova sintassi simile agli f-string, ma progettata per migliorare la sicurezza quando si compongono testi che includono variabili, come query SQL, HTML, comandi esterni, ecc.

Gli f-string sono perfetti per la formattazione immediata:

name = "Alice"
print(f"Hello {name}")

Ma quando il contenuto arriva da fuori (input utente, database, API…), inserirlo direttamente nel testo può essere pericoloso (injection).

I t-string servono proprio a questo: tenere separati testo e valori, così le librerie possono trattare gli input come dati sicuri.

🔗 Ti piace Techelopment? Dai un'occhiata al sito per tutti i dettagli!

🔍 Cosa cambia tra f-string e t-string?

✔ f-string

  • producono subito una stringa (str)
  • interpolano le variabili direttamente
  • non proteggono da injection

✔ t-string

  • producono un oggetto Template, non una stringa
  • separano:
    • le parti di testo statico (strings)
    • i punti di interpolazione (interpolations)
  • non interpolano da sole
  • permettono alle librerie di sostituire i valori in modo sicuro (es. escaping, parametrizzazione, sanitizzazione)

🧠 Un esempio semplice: dal f-string al t-string

🔵 f-string (risultato immediato)

name = "Alice"
print(f"Hello {name}")
Output
Hello Alice

🟢 t-string (stesso scopo, ma più sicuro)

name = "Alice"
tmpl = t"Hello {name}"

Ma qui succede una cosa importante:
tmpl non è una stringa!
È un Template.

Per vedere com’è fatto:

print(tmpl.strings)         # ['Hello ', '']
print(tmpl.interpolations)  # ['name']

Questo mostra la struttura del template:

  • prima parte di testo: "Hello "
  • punto di interpolazione: name
  • parte finale (vuota)

Ma quindi… come ottengo la stringa "Hello Alice"?

Dipende dal contesto in cui il template viene usato.

Python non fornisce un metodo .render(): è una scelta intenzionale. Sono le librerie (database, HTML, sanitizzatori...) che devono decidere come sostituire i valori in modo sicuro.

Per esempio, una libreria SQL potrebbe usare il template per generare una query parametrizzata:

query = t"SELECT * FROM users WHERE name = {name}"
db.execute(query, name=name)  # sarà la libreria ad applicare l'interpolazione sicura

🔐 Perché i t-string migliorano la sicurezza?

Perché impediscono che i valori inseriti vengano trattati come codice.

Con un f-string, il contenuto viene inserito dentro la stringa:

f"SELECT * FROM users WHERE name = '{name}'"

Con un t-string, invece, la libreria vede:

  • parte fissa: SELECT * FROM users WHERE name =
  • parametro: name

E può decidere di:

  • eseguire escaping
  • usare query parametrizzate
  • rifiutare valori sospetti
  • loggare separatamente la parte variabile

In pratica, il t-string rende difficile o impossibile un attacco di injection, perché il valore dell’utente non viene mai fuso nel testo.


📝 Riepilogo

Scopo f-string t-string
Formattazione rapida ✔️ ➖ non è lo scopo
Produce una stringa subito ✔️
Separa dati da testo ✔️
Sicuro contro injection ✔️
Usato in SQL, HTML, JSON, API ❌ rischioso ✔️ ideale

🎯 Conclusione

Se vuoi stampare qualcosa o formattare testo semplice:

print(f"Hello {name}")

Se invece stai passando contenuti a sistemi esterni (database, comandi shell, API…):

tmpl = t"Hello {name}"

Il risultato finale non lo generi tu:
sarà la libreria che usa il template a sostituire i valori in modo sicuro, prevenendo l’injection.

E ricorda: le istanze di Template non sono stringhe 😉


Approfondimenti



Follow me #techelopment

Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment