Подтвердить что ты не робот

Недействительный токен SyntaxError

У меня проблема, когда я пытаюсь присвоить значение переменной. Проблема проявляется, когда я пытаюсь поместить дату в виде кортежа или списка в следующем порядке: 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. Почему это происходит?

  2. Как мне это исправить?

  3. Что означает токен в Python?

4b9b3361

Ответ 1

В Python 3 ведущие нули не допускаются к номерам. Например:

05
0123

Etc. не допускаются, но должны быть записаны как 5 и 123.

В Python 2, однако, начальный ноль означает, что число является восьмеричным числом (базовое восемь), поэтому 04 или 03 будет означать 4 и 3 в восьмеричном, соответственно, но 08 будет недействительным, так как это не действительное восьмеричное число.

В Python 3 синтаксис для восьмеричных изменился на это:

0o10
0o4

(а также разрешить другие базы, такие как двоичные и шестнадцатеричные, с помощью префиксов 0b или 0x.)

Что касается вашего другого вопроса, токен в Python - это то, как интерпретатор Python разбивает ваш код на куски, чтобы он мог его понять (см. здесь). Здесь, когда токенизатор пытается разделить ваш код, он не ожидает увидеть нуль там и поэтому выдает ошибку.

Я бы предложил (аналогично другим ответам), что вы отбрасываете начальный нуль ((2016,4,3)) или представляете их с помощью строк (("2016","04","03")).

Ответ 2

04 - допустимый целочисленный литерал в Python 2.x. Он интерпретируется как восьмеричное (восьмеричное) число. 09 также будет недопустимым токеном, так как 9 не является допустимой восьмеричной цифрой.

В Python 3 форма восьмеричных литералов изменилась. Только ведущий ноль более недействителен; вам нужно явно указать базу. Например, 0o12 равно 10.

В вашем случае вы, вероятно, захотите просто опустить ведущее 0: a = (2016, 4, 3). Ведущие нули могут быть добавлены в строковое представление вашего кортежа, когда это необходимо, вместо того, чтобы пытаться их явно хранить.

Ответ 3

Проблема - это 0 перед 4. Если вы хотите сохранить эту информацию, попробуйте использовать строки.

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

В Python 2.x 04 интерпретируется как восьмеричное число. В Python 3 восьмеричные числа записываются в форме 0o4, как написано здесь: http://docs.python.org/3.0/whatsnew/3.0.html#integers

Ответ 4

В Python версии 2.7 мы получаем ошибку, когда мы используем 0 перед любым числом, и это число недопустимо в системе восьмеричных чисел. Например, если мы используем 08 или 09, мы столкнемся с той же ошибкой "неверный токен".

Интерпретатор Python делит весь скрипт на различные части, и эти части называются токенами. Здесь, 08 будет считаться токеном, и, следовательно, он является восьмеричным и недопустимым в этой системе счисления, поэтому возникает ошибка такого рода.

Можете ли вы попробовать выполнить простое утверждение типа a = 04 и указать результат? Если это работает и дает сбой только при использовании кортежа или списка, то это может быть проблемой с определенной версией Python. Если это не работает, значит, что-то не так с конфигурацией вашей машины. В этом случае вы можете обновить версию Python, если вы используете более старую версию.

Ответ 5

Когда мы устанавливаем модуль, то иногда ошибка показывает недействительный токен SyntaxError, а затем используйте следующую команду

pip install --upprade pip

после этого установите модуль, используя две команды

easy_install имя_пакета

pip install имя_пакета