Недействительный токен 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
-
Почему это происходит?
-
Как мне это исправить?
-
Что означает токен в Python?
Ответы
Ответ 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 имя_пакета