SyntaxError无效令牌

问题描述 投票:27回答:5

当我尝试为变量赋值时,我遇到了问题。当我尝试按此顺序将日期作为元组或列表时,问题就出现了: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中意味着什么?
python python-3.x syntax
5个回答
49
投票

在Python 3中,数字不允许前导零。例如:

05
0123

等等是不允许的,但应该写成5123

然而,在Python 2中,前导零表示该数字是八进制数(基数为8),因此0403分别表示八进制中的43,但08将无效,因为它不是有效的八进制数。

在Python 3中,octals的语法更改为:

0o10
0o4

(以及使用0b0x前缀允许其他基础,如二进制和十六进制。)

至于你的另一个问题,Python中的一个标记是Python解释器将你的代码分成块的方式,这样它就能理解它(参见here)。这里,当标记生成器试图分割你的代码时,它不会期望在那里看到零,因此抛出错误。

我建议(与其他答案类似)你放弃前导零((2016,4,3))或使用字符串(("2016","04","03"))表示这些。


14
投票

04是Python 2.x中的有效整数文字。它被解释为base-8(八进制)数。 09也是一个无效的标记,因为9不是有效的八进制数字。

在Python 3中,八进制文字的形式发生了变化。单独的前导零不再有效;你需要明确指定基数。例如,0o12等于10

在你的情况下,你可能只想删除前导0:a = (2016, 4, 3)。必要时,可以将前导零添加到元组的字符串表示形式,而不是尝试显式存储它们。


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


2
投票

在python版本2.7中,当我们在任何数字之前使用0并且该数字在八进制数系统中无效时,我们会收到错误。对于例如如果我们使用08或09,那么我们将遇到相同的错误'无效令牌'。

Python解释器将整个脚本划分为各个部分,这些部分称为令牌。这里,08将被视为令牌,因此它在八进制中并且在该数字系统中无效,因此发生这种错误。

你可以尝试运行像a = 04这样的简单陈述并提及结果吗?如果它只在使用元组或列表时工作和失败,那么它可能是特定python版本的问题。如果它不起作用,那么您的机器配置有问题。在这种情况下,如果您使用的是旧版本,则可以升级python版本。


-4
投票

当我们安装模块时,有时错误显示SyntaxError invalid token然后使用以下命令

pip install --upgrade pip

之后,使用两个命令安装模块

easy_install package_name

pip install package_name

© www.soinside.com 2019 - 2024. All rights reserved.