Die Python-Funktion str() ist sowohl der Konstruktor des str-Datentyps als auch eine universelle Konvertierungsfunktion. Mit einem Wert als Argument liefert sie dessen str-Repräsentation (durch Aufruf von __str__()). Mit bytes und einem encoding-Argument dekodiert sie Byte-Sequenzen in Unicode-Strings. Ohne Argument liefert sie einen leeren String.
Einleitung
Pythons str ist ein Unicode-Text — eine Sequenz von Code-Points. Strings sind unveränderlich (immutable), iterierbar und unterstützen viele Methoden für Manipulation, Suche und Formatierung.
str() hat zwei Hauptmodi:
- Generische Konvertierung:
str(42),str([1, 2, 3]),str(None)— ruft__str__()des Objekts. - Bytes-Decoding:
str(b"hallo", "utf-8")— wandelt Bytes via Encoding in Unicode.
Wichtig: str(obj) ist nicht dasselbe wie repr(obj). str() zielt auf User-freundliche Ausgabe, repr() auf eindeutige Debug-Repräsentation. Für Builtins ist der Unterschied bei Strings sichtbar: str("hi") → 'hi', repr("hi") → "'hi'" (mit Quotes).
Syntax
str() # → ""
str(object) # → object.__str__()
str(bytes_obj, encoding, errors="strict")object Ein beliebiger Python-Wert. Default: leerer String.
encoding (Optional) Name des Encodings, z. B. "utf-8", "latin-1". Wird nur ausgewertet, wenn das erste Argument bytes oder bytearray ist.
errors (Optional) Verhalten bei Decoding-Fehlern: "strict" (default), "replace", "ignore", "backslashreplace".
Rückgabewert
Eine str-Instanz.
Beispiele
Konvertierung verschiedener Typen
str() funktioniert auf nahezu jedem Wert — Builtins haben sinnvolle Default-Repräsentationen:
print(str(42))
print(str(3.14))
print(str([1, 2, 3]))
print(str({"a": 1}))
print(str(None))
print(str(True))42
3.14
[1, 2, 3]
{'a': 1}
None
TrueBytes in String dekodieren
Beim Bytes-Decoding ist das Encoding ein Pflicht-Argument — sonst liefert str(bytes) nur eine repr-artige Darstellung:
b = "Müller".encode("utf-8")
print(b)
print(str(b, "utf-8")) # korrekt dekodiert
print(str(b)) # nur Repräsentation, kein Decoding!b'M\xc3\xbcller'
Müller
b'M\xc3\xbcller'Custom-Klasse mit str und repr
Eigene Klassen definieren mit __str__ die User-Form und mit __repr__ die Debug-Form. Fehlt __str__, fällt str() auf __repr__ zurück:
class Money:
def __init__(self, cents):
self.cents = cents
def __str__(self):
return f"{self.cents / 100:.2f} €"
def __repr__(self):
return f"Money(cents={self.cents})"
m = Money(1250)
print(str(m))
print(repr(m))12.50 €
Money(cents=1250)Praktische Beispiele
Robustes Decoding mit errors="replace"
Wenn Eingabe-Bytes potentiell defekt sind (z. B. aus dem Netz), verhindert errors="replace" einen UnicodeDecodeError — fehlerhafte Bytes werden durch ein Replacement-Zeichen (U+FFFD) ersetzt:
defekt = b"Hallo \xff Welt"
print(str(defekt, "utf-8", errors="replace"))Hallo � WeltCSV-Zeile aus Werten bauen
Mit str() und einem Trenner ist eine CSV-Zeile in einer Zeile erzeugt — ohne format() oder f-String:
row = [1, "Alice", 17.5, True]
print(",".join(str(x) for x in row))1,Alice,17.5,TrueLog-Eintrag mit gemischten Typen
str() glättet alle Typen für Log-Ausgaben — vor allem None und benutzerdefinierte Objekte:
def log(level, *args):
text = " ".join(str(a) for a in args)
print(f"[{level}] {text}")
log("INFO", "User", 42, "logged in at", None)[INFO] User 42 logged in at NonePraktische Hinweise
str(b"...")ohne Encoding dekodiert NICHT — sondern liefert dierepr-Form ("b'...'"). Häufige Stolperfalle.__str__vs__repr__: User-Output vs. Debug-Output. Eigene Klassen sollten mindestens__repr__definieren.- f-Strings rufen
str()automatisch auf alle eingebetteten Werte auf — keine explizite Konvertierung nötig. - Encoding-Default ist UTF-8 in
bytes.decode()— beistr(bytes)muss man es explizit angeben. - Verwandte Funktionen:
repr()(Debug-Repräsentation),format()(formatierte Ausgabe),bytes.decode()(objekt-orientiert).