Python SyntaxError无效令牌
当我试图给一个变量赋值时,我遇到了一个问题。当我尝试按以下顺序将日期设置为元组或列表时,就会出现问题:Python SyntaxError无效令牌,python,python-3.x,syntax,Python,Python 3.x,Syntax,当我试图给一个变量赋值时,我遇到了一个问题。当我尝试按以下顺序将日期设置为元组或列表时,就会出现问题:年、月、日。 >>> 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 variab
年、月、日。
>>> 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
问题是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
在Python2.x中,04被解释为一个八进制数。
在Python3中,八进制数以0o4的形式写入,如下所示:
04
在Python2.x中是有效的整数文本。它被解释为基数为8(八进制)的数字09
也将是无效的令牌,因为9
不是有效的八进制数字
在Python3中,八进制文字的形式发生了变化。仅前导零不再有效;您需要显式地指定基。例如,0o12
等于10
在您的情况下,您可能只想删除前导的0:
a=(2016,4,3)
。必要时,可以将前导零添加到元组的字符串表示中,而不是尝试显式存储它们。在Python 3中,数字上不允许前导零。例如:
05
0123
不允许使用Etc,但应改为写为5
和123
然而,在Python 2中,前导零表示该数字是一个八进制数(以8为基数),因此04
或03
分别表示八进制中的4
和3
,但08
将无效,因为它不是有效的八进制数
在Python 3中,八进制的语法更改为:
0o10
0o4
(以及允许使用0b
或0x
前缀的其他基数,如二进制和十六进制。)
至于您的另一个问题,Python中的令牌是Python解释器将代码分割成块的方式,以便它能够理解它(请参阅)。在这里,当标记器尝试拆分代码时,它不希望在那里看到零,因此会抛出一个错误
我建议(与其他答案类似)删除前导零(
(2016,4,3)
)或使用字符串((“2016”,“04”,“03”)
)表示这些零。在python 2.7版中,在任何数字之前使用0时会出现错误,并且该数字在八进制系统中无效。例如,如果我们使用08或09,那么我们将遇到相同的错误“无效令牌”
Python解释器将整个脚本划分为不同的部分,这些部分称为令牌。这里,08将被视为令牌,因此它在该数字系统中是八进制和无效的,因此发生这种错误。
你能试着运行一个简单的语句,比如a=04,并提及结果吗?如果它只在使用tuple或list时工作并失败,那么这可能是特定python版本的问题。如果它不工作,那么您的机器配置有问题。在这种情况下,如果您使用的是较旧的版本,则可以升级python版本 出现此错误的另一个原因可能是“SyntaxError invalid token”(与问题无关,但这是我如何得到此问题的),即python变量是否以数字开头。下面是Python中的一些其他命名约定,
04
对Python没有任何意义,请尝试使用4
和3
,不要使用零!是的,它可以工作,但为什么它可以工作,当kick zero04
对python有意义时,它在python 2.xTry中表示八进制数,将04加上引号,例如“04”@zixrobert,您使用的python版本是什么?这在2.7中似乎很好,您应该解释出现错误的原因。这是OP提出的问题之一。这对他们没有多大帮助。是的,我不知道,但为什么在我使用04&03@zixrobert读另一个答案。它实际上解释了这一点。为什么错误不是“语法错误”,而是“无效令牌”?@brainLoop:它已经说了SyntaxError。“无效标记”是一种语法错误。@user2357112我的意思是,为什么不用“SyntaxError:invalid syntax”代替“SyntaxError:invalid token”