web-dev-qa-db-fra.com

SyntaxError invalide jeton

J'ai un problème lorsque j'essaie d'attribuer une valeur à une variable. Le problème apparaît lorsque j'essaie de mettre une date sous forme de tuple ou de liste dans cet ordre: 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. Pourquoi est-ce que ça se passe?

  2. Comment je le répare?

  3. Que signifie jeton en Python?

30
zerocool

Dans Python 3, les zéros de gauche ne sont pas autorisés sur les nombres. E.g:

05
0123

Etc. ne sont pas autorisés, mais doivent être écrits en tant que 5 et 123 au lieu.

Dans Python 2, cependant, le zéro de gauche signifie que le nombre est un nombre octal (base huit), donc 04 ou 03 signifierait 4 et 3 en octal, respectivement, mais 08 serait invalide car ce n'est pas un nombre octal valide.

Dans Python 3, la syntaxe des octaux a été modifiée comme suit:

0o10
0o4

(En plus d'autoriser d'autres bases telles que binaires et hexadécimales en utilisant le 0b ou 0x préfixes.)

En ce qui concerne votre autre question, un jeton dans Python est la façon dont l’interprète Python divise votre code en morceaux, de sorte qu’il puisse le comprendre (voir - ici ). Ici, lorsque le tokenizer essaie de scinder votre code, il ne s'attend pas à voir le zéro à cet endroit et génère une erreur.

Je suggérerais (de la même manière que pour les autres réponses) de supprimer le zéro non significatif ((2016,4,3)) ou les représente en utilisant des chaînes (("2016","04","03")).

49
Tuomas Laakkonen

04 Est un littéral entier valide dans Python 2.x. Il est interprété comme un nombre base 8 (octal). 09 Serait un jeton non valide. de même, puisque 9 n'est pas un chiffre octal valide.

Dans Python 3, la forme des littéraux octaux a été modifiée. Un zéro seul n'est plus valide; vous devez spécifier explicitement la base. Par exemple, 0o12 Est égal à 10.

Dans votre cas, vous voudrez probablement simplement laisser tomber le 0: a = (2016, 4, 3). Des zéros non significatifs peuvent être ajoutés à la représentation sous forme de chaîne de votre tuple si nécessaire, plutôt que d'essayer de les stocker explicitement.

14
chepner

Le problème est le 0 avant le 4. Si vous souhaitez stocker ce type d'informations, essayez d'utiliser des chaînes.

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

Dans Python 2.x 04 est interprété comme un nombre octal. Dans Python 3 nombres octaux sont écrits sous la forme 0o4 telle qu'écrite ici: http : //docs.python.org/3.0/whatsnew/3.0.html#integers

2
vinx.py

Dans python version 2.7, nous obtenons une erreur lorsque nous utilisons 0 avant tout nombre et que ce nombre est invalide dans un système à nombres octaux. Par exemple, si nous utilisons 08 ou 09, nous rencontrerons la même erreur ' jeton invalide'.

Un interpréteur Python divise le script entier en différentes parties, appelées des jetons. Ici, 08 sera considéré comme un jeton et par conséquent, il est octal et invalide dans ce système de numération de sorte que ce type d'erreur se produit.

Pouvez-vous s'il vous plaît essayer d'exécuter une simple déclaration comme a = 04 et mentionner le résultat? Si cela fonctionne et échoue uniquement lors de l’utilisation de Tuple ou de la liste, cela peut être le problème avec une version particulière python version. Si cela ne fonctionne pas, il y a un problème avec la configuration de votre machine. Dans ce cas, vous pouvez mettre à jour votre version de python si vous utilisez l'ancienne version.

2
Piyush