SyntaxError ongeldig token

Ik heb een probleem wanneer ik een waarde aan een variabele probeer toe te kennen. Het probleem treedt op wanneer ik een datum als een tuple of een lijst in deze volgorde probeer te zetten: year, month, day.

>>> a = (2016,04,03)         # I try to put the date into variable 'a' as a tuple.
SyntaxError: invalid token
>>> a = [2016,04,03]         # I try to put the date into variable 'a' as a list.
SyntaxError: invalid token
  1. Waarom gebeurt dit?

  2. Hoe los ik het op?

  3. Wat betekent token in Python?


Antwoord 1, autoriteit 100%

In Python 3 zijn voorloopnullen niet toegestaan op getallen. Bijv.:

05
0123

Enz. zijn niet toegestaan, maar moeten in plaats daarvan worden geschreven als 5en 123.

In Python 2 betekent de voorloopnul echter dat het getal een octaal getalis (grondtal acht), dus 04of 03zou respectievelijk 4en 3in octaal betekenen, maar 08zou ongeldig zijn omdat het geen geldig octaal getal is.

In Python 3 is de syntaxis voor octalen als volgt gewijzigd:

0o10
0o4

(Naast het toestaan van andere basen, zoals binair en hexadecimaal, met behulp van de voorvoegsels 0bof 0x.)

Wat uw andere vraag betreft, een token in Python is de manier waarop de Python-interpreter uw code in stukken opsplitst, zodat deze deze kan begrijpen (zie hier). Hier, wanneer de tokenizer je code probeert op te splitsen, verwacht hij daar niet de nul te zien en geeft hij dus een foutmelding.

Ik zou willen voorstellen (net als bij de andere antwoorden) om de voorloopnul ((2016,4,3)) weg te laten of deze weer te geven met strings (("2016","04","03")).


Antwoord 2, autoriteit 19%

04is een geldige integer letterlijk in Python 2.x. Het wordt geïnterpreteerd als een basis-8 (octaal) getal. 09zou ook een ongeldig token zijn, aangezien 9geen geldig octaal cijfer is.

In Python 3 is de vorm van octale literalen veranderd. Een voorloopnul alleen is niet langer geldig; u moet de basis expliciet specificeren. 0o12is bijvoorbeeld gelijk aan 10.

In jouw geval wil je waarschijnlijk de eerste 0 laten vallen: a = (2016, 4, 3). Voorloopnullen kunnen indien nodig worden toegevoegd aan de tekenreeksrepresentatie van uw tuple, in plaats van ze expliciet op te slaan.


Antwoord 3, autoriteit 5%

Het probleem is de 0 voor de 4.
Als je dat soort informatie wilt opslaan, probeer dan strings te gebruiken.

a = (2016,04,03) --> Error
a = (2016,4,3) --> No Error
a = ("2016","04","03") --> No Error
a = "2016-04-03" --> you could retrieve Year, Month and Day by splitting this string

In Python 2.x wordt 04 geïnterpreteerd als een octaal getal.
In Python worden 3 octale getallen geschreven in de vorm 0o4 zoals hier geschreven: http://docs .python.org/3.0/whatsnew/3.0.html#integers


Antwoord 4, autoriteit 4%

In python-versie 2.7 krijgen we een foutmelding wanneer we 0 voor een willekeurig getal gebruiken en dat getal is ongeldig in het octaalgetalsysteem. Voor bijv. als we 08 of 09 gebruiken, zullen we dezelfde fout ‘invalid token’ tegenkomen.

Python-interpreter verdeelt het hele script in verschillende delen en die delen worden tokens genoemd. Hier wordt 08 als token beschouwd en daarom is het in octaal en ongeldig in dit nummersysteem, dus dit soort fouten treden op.

Kun je alsjeblieft proberen om een simpele instructie zoals a=04 uit te voeren en het resultaat te vermelden? Als het werkt en alleen faalt tijdens het gebruik van tuple of list, dan kan dit het probleem zijn met een bepaalde python-versie. Als het niet werkt, is er iets mis met uw machineconfiguratie. In dit geval kunt u uw python-versie upgraden als u de oudere versie gebruikt.


Antwoord 5

Een andere reden waarom deze fout ‘SyntaxError ongeldig token’ kan verschijnen (niet gerelateerd aan de vraag, maar zo kwam ik aan deze vraag) is als de python-variabele met een getal begint. Hier zijn een paar andere naamgevingsconventies in Python, https://www.python.org /dev/peps/pep-0484/

Other episodes