W3docs

Python Type Casting: Zwischen Datentypen konvertieren

Python Type Casting mit klaren Beispielen: int, float, str, bool und Collections umwandeln. Implizites vs. explizites Casting und häufige Fehler.

Type Casting (auch Typkonvertierung genannt) ist der Vorgang, einen Wert von einem Datentyp in einen anderen umzuwandeln. Python unterstützt dies durch eine Reihe eingebauter Konstruktorfunktionen — int(), float(), str(), bool(), list(), tuple(), set() und weitere. Zu wissen, wann und wie man Casting anwendet, ist essenziell für das Schreiben korrekter, flexibler Python-Programme.

Dieses Kapitel behandelt:

  • Den Unterschied zwischen implizitem und explizitem Casting
  • Alle wichtigen eingebauten Casting-Funktionen mit funktionierenden Beispielen
  • Numerische Basiskonvertierungen (hex, oct, bin und zurück)
  • Collection-Typkonvertierungen (list, tuple, set)
  • Boolean Truthy/Falsy-Regeln und typische Fallstricke beim Casting
  • Häufige Fehler (TypeError, ValueError) und wie man sie vermeidet

Implizites vs. explizites Casting

Python unterscheidet zwischen zwei Arten der Typkonvertierung.

Implizites Casting

Implizites Casting geschieht automatisch, wenn Python zwei kompatible Typen in einem Ausdruck vereinen muss. Kein Funktionsaufruf ist erforderlich — Python wandelt den „engeren" Typ um, um Datenverlust zu vermeiden.

Der häufigste Fall ist die Kombination von Ganzzahlen und Gleitkommazahlen in der Arithmetik. Python wandelt die Ganzzahl immer in eine Gleitkommazahl um, damit das Ergebnis den Dezimalteil erfasst:

python— editable, runs on the server

Python konvertiert nicht implizit zwischen unverwandten Typen wie string und Zahlen. Der Versuch "10" + 5 löst einen TypeError aus. In solchen Fällen ist explizites Casting erforderlich.

Explizites Casting

Explizites Casting bedeutet, eine Konstruktorfunktion aufzurufen, um einen Wert selbst zu konvertieren:

python— editable, runs on the server

Der Rest dieses Kapitels behandelt alle wichtigen Funktionen für explizites Casting im Detail.

Numerisches Casting: int(), float(), complex()

int() — In eine Ganzzahl konvertieren

int() akzeptiert Ganzzahlen, Gleitkommazahlen, boolean-Werte und numerische Strings. Bei der Konvertierung einer Gleitkommazahl wird abgeschnitten (der Dezimalteil wird verworfen), nicht gerundet:

# float → int  (truncates, does NOT round)
print(int(10.9))   # 10
print(int(-10.9))  # -10

# string → int
print(int("42"))   # 42

# bool → int
print(int(True))   # 1
print(int(False))  # 0

Beachte, dass int(-10.9) den Wert -10 zurückgibt, nicht -11. Python schneidet in Richtung null ab, nicht in Richtung negativer Unendlichkeit (das wäre math.floor()).

float() — In eine Gleitkommazahl konvertieren

float() akzeptiert Ganzzahlen, boolean-Werte und numerische Strings (einschließlich "inf" und "nan"):

print(float(10))      # 10.0
print(float("3.14"))  # 3.14
print(float(True))    # 1.0
print(float("inf"))   # inf

complex() — In eine komplexe Zahl konvertieren

complex() erstellt eine komplexe Zahl aus Real- und Imaginärteil oder aus einem string:

print(complex(3, 4))    # (3+4j)
print(complex("3+4j"))  # (3+4j)

String-Casting: str()

str() konvertiert nahezu jedes Python-Objekt in seine string-Darstellung. Dies ist nützlich für die Verkettung und beim Erstellen von Ausgaben:

age = 30
message = "I am " + str(age) + " years old."
print(message)  # I am 30 years old.

print(str(3.14))   # '3.14'
print(str(True))   # 'True'
print(str(None))   # 'None'

Für die Formatierung von Zahlen innerhalb von Strings empfiehlt sich das Kapitel über Python f-strings für einen ergonomischeren Ansatz.

Boolean-Casting: bool() und Truthy/Falsy-Werte

bool() konvertiert jeden Wert mithilfe der Truthy/Falsy-Regeln von Python in True oder False. Das Einprägen der falschen Werte ist wichtig, da Bedingungen in if-Anweisungen und while-Schleifen implizit dieselben Regeln verwenden.

Falsy-Werte — diese werden alle als False ausgewertet:

print(bool(0))      # False  — zero integer
print(bool(0.0))    # False  — zero float
print(bool(""))     # False  — empty string
print(bool([]))     # False  — empty list
print(bool(None))   # False  — None

Truthy-Werte — alles andere wird als True ausgewertet:

print(bool(1))      # True
print(bool(-1))     # True  — any non-zero number
print(bool("a"))    # True
print(bool([0]))    # True  — a list with one element

Typischer Fallstrick: Das Casten eines string zu bool gibt immer True zurück, es sei denn, der string ist leer — sogar bool("False") ist True. Um zu prüfen, ob ein string einen Falsy-boolean-Wert repräsentiert, muss er explizit verglichen werden:

# This is WRONG — bool("False") is True!
user_input = "False"
print(bool(user_input))              # True  (non-empty string)

# Correct approach: compare the string
print(user_input.lower() == "true")  # False

Numerische Basiskonvertierungen

Ganzzahlen in anderen Basen mit int() parsen

int() akzeptiert ein optionales zweites Argument, das die Basis des Quell-strings angibt. Damit lassen sich binäre, oktale und hexadezimale Literale parsen:

print(int("1010", 2))   # 10  — binary string
print(int("17", 8))     # 15  — octal string
print(int("ff", 16))    # 255 — hexadecimal string

# Pass 0 to auto-detect Python prefix notation
print(int("0b1010", 0)) # 10
print(int("0o17", 0))   # 15
print(int("0xFF", 0))   # 255

Ganzzahlen in Basis-Strings konvertieren

Python verfügt über drei eingebaute Funktionen, die eine Ganzzahl als basis-präfixierten string formatieren:

print(bin(10))   # '0b1010'
print(oct(8))    # '0o10'
print(hex(255))  # '0xff'

Diese geben Strings zurück, keine Ganzzahlen. Wenn der string ohne Präfix benötigt wird, kann man Slicing verwenden: bin(10)[2:] ergibt '1010'.

Collection-Typkonvertierungen

Du kannst zwischen list, tuple und set mithilfe ihrer Konstruktorfunktionen konvertieren. Bei der Konvertierung in set werden Duplikate entfernt und die Reihenfolge geht verloren:

# list → tuple
coords = [10, 20, 30]
print(tuple(coords))   # (10, 20, 30)

# tuple → list
point = (4, 5, 6)
mutable = list(point)
mutable.append(7)
print(mutable)         # [4, 5, 6, 7]

# list → set  (removes duplicates)
numbers = [1, 2, 2, 3, 3, 3]
unique = set(numbers)
print(unique)          # {1, 2, 3}

Das Konvertieren eines string in eine list zerlegt ihn in einzelne Zeichen:

print(list("hello"))   # ['h', 'e', 'l', 'l', 'o']

Alle numerischen und string-Konvertierungen: Kurzreferenz

Die folgenden Beispiele zeigen die vollständige Bandbreite des numerischen und string-Castings auf einen Blick:

Python casting numeric

# Converting an integer to a floating-point number
x = 10
y = float(x)
print(y)

# Converting a floating-point number to an integer
x = 10.5
y = int(x)
print(y)

# Converting a string to an integer
x = "10"
y = int(x)
print(y)

# Converting a string to a floating-point number
x = "10.5"
y = float(x)
print(y)

# Converting an integer to a string
x = 10
y = str(x)
print(y)

# Converting a floating-point number to a string
x = 10.5
y = str(x)
print(y)

# Converting a number to a boolean
x = 0
y = bool(x)
print(y)

x = 10
y = bool(x)
print(y)

Häufige Fehler

TypeError

Ein TypeError wird ausgelöst, wenn ein Typ übergeben wird, den die Funktion überhaupt nicht konvertieren kann — zum Beispiel eine list an int():

Python casting unsupported type to int

python— editable, runs on the server

Ausgabe:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

ValueError

Ein ValueError wird ausgelöst, wenn der Typ korrekt ist (z. B. ein string), der Wert jedoch nicht konvertiert werden kann — zum Beispiel ein Wort, das an float() übergeben wird:

Python casting string to float

python— editable, runs on the server

Ausgabe:

ValueError: could not convert string to float: 'hello'

Präzisionsverlust beim Casten von float zu int

Das Konvertieren einer Gleitkommazahl in eine Ganzzahl schneidet den Dezimalteil stillschweigend ab. Es gibt keine Warnung — und bei negativen Zahlen kann das Verhalten überraschend sein:

Python casting float to int

python— editable, runs on the server

Ausgabe:

10

Wenn Rundung benötigt wird, sollte round() vor dem Casting verwendet werden, oder math.floor() / math.ceil(), um die Richtung explizit zu steuern.

Sicheres Casting mit try/except

Wenn ein Programm Daten aus Benutzereingaben, Dateien oder externen APIs empfängt, kann nicht im Voraus bekannt sein, ob ein Wert erfolgreich gecastet wird. Verwende einen try/except-Block, um Fehler abzufangen, ohne das Programm zum Absturz zu bringen:

Python safe casting with try/except

python— editable, runs on the server

Ausgabe:

Conversion failed: invalid literal for int() with base 10: 'hello'
10

Dieses Muster ist besonders nützlich bei der Verarbeitung von Formularfeldern oder CSV-Zeilen, bei denen jede Spalte unerwartete Daten enthalten kann.

Übungen

Übung
In Python, how does casting take place and what are its functions?
In Python, how does casting take place and what are its functions?
Was this page helpful?