HOWTO · Python
Beheben Sie den Syntaxfehler: Ungültiges Token in Python
Python 3 weist dezimale Ganzzahlliterale mit führenden Nullen zurück. Hier erfahren Sie, wann Sie stattdessen Ganzzahlen, Zeichenfolgen oder einen Datumstyp verwenden sollten.
Auf dieser Seite
In Python 3 ist 0 ein gültiges dezimales Ganzzahlliteral. Dezimale Ganzzahlliterale ungleich null dürfen jedoch keine führenden Nullen haben: 04 und 08 verursachen einen SyntaxError. Verwenden Sie 4 und 8, wenn Sie Zahlen benötigen, Zeichenfolgen in Anführungszeichen wie "04" und "08", wenn die Nullen in der Anzeige erhalten bleiben sollen, oder einen Datumstyp für Kalenderoperationen.
Warum Python ein ungültiges Token meldet
Python liest Quellcode als Folge von Tokens, etwa Namen, Operatoren, Satzzeichen und Literalen. Ein Literal ist ein Wert, der direkt im Quellcode steht. Die Zeichen 04 sehen vielleicht wie die Zahl vier mit einer vorangestellten Null zur Anzeige aus, sind aber kein gültiges dezimales Ganzzahlliteral in Python 3. Deshalb lässt sich ein Tupel wie (04, 08, 2022) nicht parsen, sodass der zugehörige print-Aufruf nicht ausgeführt wird.
Die Meldung SyntaxError: invalid token erscheint in älteren Python-Diagnosen und in manchen Umgebungen. Aktuelle Python-3-Versionen können eine andere Meldung ausgeben, etwa leading zeros in decimal integer literals are not permitted; der genaue Wortlaut hängt von der Interpreterversion ab. In beiden Fällen liegt das Problem in der Schreibweise des Ganzzahlliterals, nicht in Leerzeichen zwischen Tokens oder in der Funktion print. Die Regeln für Ganzzahlliterale von Python beschreiben die zulässigen Formen.
Ganzzahlliterale mit führenden Nullen in Python 3 korrigieren
Entfernen Sie bei Dezimalzahlen die führende Null und verwenden Sie 4 und 8. Python behandelt diese Werte als gewöhnliche Ganzzahlen. Wenn Sie einen Oktalwert gemeint haben, verwendet Python 3 dafür das Präfix 0o, zum Beispiel 0o10; 08 ist keine gültige Oktalschreibweise. Die Hexadezimalschreibweise beginnt mit 0x, aber eine Datumskomponente in eine Hexadezimalzahl umzuwandeln erhält weder ihre vorgesehene Anzeige noch macht es sie zu einem Datum.
Wenn die führende Null zur Darstellung eines Werts gehört, speichern Sie die Komponente als Text. Dieses Beispiel bewahrt die Formatierung von Tag und Monat in einem Tupel:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
date_parts = ("04", "08", "2022")
print(date_parts)
Das Tupel enthält drei Zeichenfolgen, daher bleiben die führenden Nullen Teil der Werte. Es eignet sich für eine einfache Anzeige oder die Eingabeverarbeitung, aber die Komponenten sind keine Zahlen und bieten keine Kalenderprüfung. Wird eine Zeichenfolge wie "04" in eine Ganzzahl umgewandelt, ergibt sich 4; die ursprüngliche Formatierung geht dabei verloren, sofern Sie sie nicht erneut anwenden.
Zeichenfolgen, Ganzzahlen oder Datumswerte passend zur Bedeutung wählen
Wählen Sie die Darstellung passend zur Aufgabe. Verwenden Sie Ganzzahlen, wenn es auf Rechenoperationen oder numerische Vergleiche ankommt: Die Komponenten für Tag und Monat können 4 und 8 sein. Verwenden Sie Zeichenfolgen wie "04" und "08", wenn eine feste Stellenbreite wichtig ist, etwa in einem Formular, Dateinamen oder manuell zusammengesetzten Text. Ein Wörterbuch kann benannte Textfelder übersichtlicher machen, zum Beispiel mit den Schlüsseln "Day", "Month" und "Year"; es speichert weiterhin Zeichenfolgen und prüft nicht, ob die Kombination ein echtes Datum ergibt.
Für Kalenderoperationen sollten Sie einen Datumstyp verwenden, statt ein Datum als beliebiges Tupel zu behandeln. Der Python-Standardtyp datetime.date bildet Jahr, Monat und Tag ab und prüft beim Erstellen, ob das Kalenderdatum gültig ist. Ein Wert, der konzeptionell date(2022, 8, 4) entspricht, enthält beispielsweise numerische Komponenten für Kalenderoperationen; bei der Formatierung für die Anzeige lassen sich führende Nullen ergänzen, ohne diese Komponenten zu ändern. Beachten Sie, dass Datumsformatierung und die Syntax von Ganzzahlliteralen unterschiedliche Probleme lösen: Die Formatierung steuert die Darstellung vorhandener Werte, während Python eine gültige Literalschreibweise benötigt, um den Quellcode überhaupt parsen zu können.