Pythons neue `t-strings`
(davepeck.org)- t-Strings sind eine in Python 3.14 neu eingeführte sichere und flexible Funktion zur String-Verarbeitung
- Anders als bisherige f-Strings liefern t-Strings keinen String, sondern ein
Template-Objekt zurück, wodurch sichere Verarbeitung ohne automatische Ausgabe möglich wird - t-Strings haben eine Struktur, mit der sich dynamische Eingaben für HTML, SQL usw. sicher escapen lassen
- Das Konzept ähnelt den tagged templates in JavaScript und ermöglicht vielfältige Erweiterungen für Transformation und Verarbeitung
- Wenn das Python-Ökosystem für Entwicklungstools diese Funktion gut unterstützt, könnte sie die web-/sicherheitsorientierte String-Verarbeitung stark verändern
Pythons neue Funktion: t-Strings (Template Strings)
- Ab Python 3.14 werden Template Strings (t-Strings) mit der Syntax
t"..."als offizielle Funktion eingeführt - Anders als bisherige f-Strings werden t-Strings nicht sofort als String, sondern als
string.templatelib.Template-Objekt ausgewertet - Dieses Objekt benötigt vor der Ausgabe einen separaten Verarbeitungsschritt; dadurch werden sichere Behandlung und Transformation dynamischer Werte möglich
Warum können f-Strings riskant sein?
- Weil f-Strings sofort zu Strings ausgewertet werden, können in Code mit Benutzereingaben SQL-Injection oder XSS auftreten
- Beispiel:
f"<div>{user_input}</div>"→ schädlicher Code kann direkt eingefügt werden
- Beispiel:
- t-Strings verzögern diese Auswertung, sodass sie nur nach expliziter Verarbeitung verwendet werden können
Beispielverwendung von t-Strings
-
Beispiel für HTML-Escaping:
evil = "<script>alert('bad')</script>" template = t"<p>{evil}</p>" safe = html(template) # safe ist "<p><script>alert('bad')</script></p>" -
Auch komplexere Verarbeitung wie das automatische Einfügen von Attributen ist möglich:
attributes = {"src": "roquefort.jpg", "alt": "Yum"} template = t"<img {attributes} />" element = html(template) # Ergebnis: "<img src='roquefort.jpg' alt='Yum' />"
Struktur und API
-
Das
Template-Objekt stellt über die Attribute.stringsund.valuesden Originaltext und die eingesetzten Werte getrennt bereit -
Über das Attribut
interpolationssind sogar Formatdetails wie!s,:>8usw. zugänglich -
Über Iteration kann auch ein gemischter Zustand aus Text und Werten direkt verarbeitet werden
-
Manuelle Erstellung ist ebenfalls möglich:
from string.templatelib import Template, Interpolation template = Template( "Hello ", Interpolation(value="World", expression="name"), "!" )
Interessantes Beispiel: Pig-Latin-Konverter
-
Ein Beispiel, das den Inhalt eines
Template-Objekts durchläuft und Wörter in Pig Latin umwandelt:def pig_latin(template: Template) -> str: ... name = "world" template = t"Hello {name}!" assert pig_latin(template) == "Hello orldway!"
Zukünftige Entwicklung
- t-Strings können Sicherheit und Erweiterbarkeit in die web-/sicherheitsorientierte String-Verarbeitung bringen
- Es bleibt zu hoffen, dass Entwicklungstools wie
black,ruffund VS Code Formatierung/Highlighting für t-Strings unterstützen - Da das Konzept den tagged templates entspricht, die JavaScript-Entwickler bereits kennen, ist die Einsatzmöglichkeit auch in verschiedenen Frameworks hoch
Zusammenarbeit mit der Entwickler-Community
- Diese Funktion wurde durch die Beteiligung und Zusammenarbeit vieler Mitglieder der Python-Community fertiggestellt
- Besonders erwähnt wird der Austausch mit zentralen Personen wie Jim, Paul, Koudai, Lysandros und Guido
- PEP 750 und das zugehörige Beispiel-Repository sind auf GitHub zu finden
Die t-Strings-Funktion in Python 3.14 sichert Sicherheit und Erweiterbarkeit zugleich ab und ist ein wichtiger Sprung über die Grenzen bisheriger f-Strings hinaus
2 Kommentare
PEP 750 – Template-Strings (
t-strings) genehmigtHacker-News-Kommentare
Insgesamt ist dieses Feature ziemlich cool. Im Grunde verwandelt es Code wie diesen
in Folgendes
Es stellt sich die Frage, ob dieser syntaktische Zucker den Aufwand durch die zusätzliche Komplexität als neues Sprachfeature wert ist. Ich denke, in diesem Fall ja, und zwar aus zwei Gründen
{}-Erweiterung damit machen können, was sie wollen, und das dürfte zu guten Anwendungsfällen führenIch hoffe auch, dass sich das Tooling-Ökosystem anpasst, um t-strings zu unterstützen. Zum Beispiel wäre es schön, wenn black und ruff den Inhalt von t-strings formatieren und vscode Inhalte gängiger Typen wie HTML oder SQL farblich hervorheben würden
sql”select * from {table}”das leisten können, aber es gibt keine Garantie, dass das im Template enthaltene durch die Umwandlungsfunktion in gültiges SQL umgewandelt wird.t“give me {table} but only {columns}”könnte nach der Verarbeitung des Templates in gültiges SQL umgewandelt werdenKönnte man eine saubere SQL-Syntax wie die folgende verwenden?
Wenn die Funktion
db.get()Templates akzeptiert, dann ja. Das wäre die sauberste Art, SQL zu verwenden, die ich bisher gesehen habePersönlich scheint mir dieses Feature zu stark auf ein spezielles Problem fokussiert, um ein allgemeines Feature zu sein. Python wird immer größer. Wenn Leute fragen, ob Python leicht zu lernen und einfach sei, muss man sagen: „Die Grundlagen schon, aber die gesamte Sprache zu lernen ist es nicht“
Große Diskussion (414 Punkte, vor 10 Tagen, 324 Kommentare) Link
Ziemlich cool. Wenn schon JS-Features portiert werden, bekommen wir dann als Nächstes Dictionary-Unpacking/Destructuring?
Dass diese neue x-string-Funktion eingebaut ist, fühlt sich für mich wie ein „Trick“ an. Es wäre cool, wenn man so etwas tun könnte
Zen of Python im Jahr 2025:
Python-String-Formatting im Jahr 2025:
Ich verstehe nicht, wie sich das davon unterscheidet, eine Funktion auf das Template anzuwenden, statt sie auf eine f-string-Variable anzuwenden. Also warum nicht einfach statt
einfach so:
Oder bevor man den f-string erstellt. Geht es einfach darum, dass man den Bereinigungs-/String-Manipulationsschritt nicht vergisst und dazu gezwungen wird?
Hallo! Ich habe diesen Beitrag geschrieben :-)