EMZETT.
Login

Numbers & Strings

Kurz: Die Umwandlung zwischen numerischen Werten und ihrer Textdarstellung — z. B. eine eingegebene Zahl, die zunächst als String vorliegt und in eine tatsächlich rechenbare Zahl umgewandelt werden muss, oder umgekehrt.

Genauer: Diese Umwandlung ist eine der häufigsten Fehlerquellen bei der Verarbeitung von Benutzereingaben: Enthält der eingegebene Text kein gültiges Zahlenformat (z. B. Buchstaben statt Ziffern), löst die Umwandlung typischerweise eine Exception aus, die abgefangen werden muss. Bei der umgekehrten Richtung (Zahl zu Text) ist zu beachten, dass unterschiedliche Regionen unterschiedliche Formate für Dezimaltrennzeichen (Punkt vs. Komma) verwenden.

Im Detail

eingabe = input("Alter: ")       # kommt IMMER als String zurück, z.B. "25"
alter = int(eingabe)              # explizite Umwandlung String -> Zahl
naechstes_jahr = alter + 1        # jetzt kann gerechnet werden

Der zentrale Punkt: Eine Nutzereingabe (aus einem Terminal, einem Formularfeld, einer Datei) kommt in praktisch jeder Sprache zunächst als reiner Text an — selbst wenn der Nutzer “25” eingibt, ist das für das Programm erstmal nur die Zeichenfolge "25", keine rechenbare Zahl. Ohne explizite Umwandlung würde "25" + 1 je nach Sprache entweder einen Fehler werfen oder (schlimmer) die Zahl 1 einfach an den Text anhängen ("251") statt zu addieren.

Diese Umwandlung schlägt zuverlässig fehl, wenn der Text kein gültiges Zahlenformat ist:

alter = int("fünfundzwanzig")   # löst einen Fehler aus - kein gültiges Zahlenformat

Deshalb sollte jede Umwandlung von Nutzereingaben in Zahlen mit einer Fehlerbehandlung (Exception-Handling) abgesichert werden, statt blind davon auszugehen, dass die Eingabe immer im richtigen Format vorliegt — Nutzer tippen sich vertippen, kopieren falsche Werte, oder geben absichtlich unsinnige Daten ein.

Bei der umgekehrten Richtung (Zahl in Text umwandeln, z. B. zum Anzeigen) lauert eine weniger offensichtliche, aber ebenso reale Falle: das Dezimaltrennzeichen. Manche Regionen/Sprachen verwenden einen Punkt (3.14), andere ein Komma (3,14) — wird eine Zahl mit dem falschen regionalen Format als Text ausgegeben oder umgekehrt eingelesen, führt das zu subtil falschen Werten (aus 3,14 könnte fälschlich 314 werden, wenn das Komma als Tausendertrennzeichen statt als Dezimaltrennzeichen interpretiert wird).

Siehe auch: Type Casting, String Concatenation, User Input