当我尝试为变量赋值时,我遇到了问题。
当我尝试按此顺序将a
作为tuple
或list
添加日期时出现问题: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中意味着什么?
答案 0 :(得分:46)
在Python 3中,数字上不允许前导零。 E.g:
05
0123
等。不允许,但应改为5
和123
。
然而,在Python 2中,前导零表示该数字是八进制数(基数为8),因此04
或03
将表示{{1}和4
分别在八进制中,但3
将无效,因为它不是有效的八进制数。
在Python 3中,octals的语法更改为:
08
(以及使用0o10
0o4
或0b
前缀允许其他基础,如二进制和十六进制。)
至于你的另一个问题,Python中的一个标记就是Python解释器将你的代码分成块的方式,这样它就能理解它(参见here)。这里,当标记生成器试图分割你的代码时,它不希望在那里看到零,因此抛出错误。
我建议(与其他答案类似)放弃前导零(0x
)或使用字符串((2016,4,3)
)表示这些。
答案 1 :(得分:14)
04
是Python 2.x中的有效整数文字。它被解释为base-8(八进制)数。 09
也是无效的令牌,因为9
不是有效的八进制数字。
在Python 3中,八进制文字的形式发生了变化。单独的前导零不再有效;你需要明确指定基数。例如,0o12
等于10
。
在您的情况下,您可能只想删除前导0:a = (2016, 4, 3)
。必要时,可以将前导零添加到元组的字符串表示中,而不是尝试显式存储它们。
答案 2 :(得分:2)
问题是4之前的0。 如果您想存储这种信息,请尝试使用字符串。
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
答案 3 :(得分:2)
在python版本2.7中,当我们在任何数字之前使用0时,我们会收到错误,并且该数字在八进制数系统中无效。对于例如如果我们使用08或09,那么我们将遇到相同的错误'无效令牌'。
Python解释器将整个脚本分成不同的部分,这些部分称为标记。在这里,08将被视为令牌,因此它在八进制中并且在此数字系统中无效,因此会发生此类错误。
你可以试着像a = 04那样运行一个简单的陈述并提出结果吗?如果它只在使用元组或列表时工作和失败,那么它可能是特定python版本的问题。如果它不起作用,那么您的机器配置有问题。在这种情况下,如果您使用的是旧版本,则可以升级python版本。
答案 4 :(得分:0)
此错误可能出现“SyntaxError invalid token”的另一个原因(与问题无关,但我是如何得到这个问题的)是python变量是否以数字开头。以下是 Python 中的其他一些命名约定,https://www.python.org/dev/peps/pep-0484/
答案 5 :(得分:-2)
当我们安装模块时,有时错误显示SyntaxError invalid token然后使用以下命令
pip install --upgrade pip
之后然后使用两个命令安装模块
easy_install package_name
pip install package_name