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:

  1. Generische Konvertierung: str(42), str([1, 2, 3]), str(None) — ruft __str__() des Objekts.
  2. 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

Python Syntax
str()                          # → ""
str(object)                    # → object.__str__()
str(bytes_obj, encoding, errors="strict")
Parameter
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:

Python Beispiel
print(str(42))
print(str(3.14))
print(str([1, 2, 3]))
print(str({"a": 1}))
print(str(None))
print(str(True))
Output
42
3.14
[1, 2, 3]
{'a': 1}
None
True

Bytes in String dekodieren

Beim Bytes-Decoding ist das Encoding ein Pflicht-Argument — sonst liefert str(bytes) nur eine repr-artige Darstellung:

Python Beispiel
b = "Müller".encode("utf-8")
print(b)
print(str(b, "utf-8"))         # korrekt dekodiert
print(str(b))                   # nur Repräsentation, kein Decoding!
Output
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:

Python Beispiel
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))
Output
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:

Python Beispiel
defekt = b"Hallo \xff Welt"
print(str(defekt, "utf-8", errors="replace"))
Output
Hallo � Welt

CSV-Zeile aus Werten bauen

Mit str() und einem Trenner ist eine CSV-Zeile in einer Zeile erzeugt — ohne format() oder f-String:

Python Beispiel
row = [1, "Alice", 17.5, True]
print(",".join(str(x) for x in row))
Output
1,Alice,17.5,True

Log-Eintrag mit gemischten Typen

str() glättet alle Typen für Log-Ausgaben — vor allem None und benutzerdefinierte Objekte:

Python Beispiel
def log(level, *args):
    text = " ".join(str(a) for a in args)
    print(f"[{level}] {text}")

log("INFO", "User", 42, "logged in at", None)
Output
[INFO] User 42 logged in at None

Praktische Hinweise

  • str(b"...") ohne Encoding dekodiert NICHT — sondern liefert die repr-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() — bei str(bytes) muss man es explizit angeben.
  • Verwandte Funktionen: repr() (Debug-Repräsentation), format() (formatierte Ausgabe), bytes.decode() (objekt-orientiert).
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht