SyntaxError无效令牌

zix*_*ool 34 python syntax python-3.x

我有问题:当我试图把一个值变量year, month, day. 的问题显示出来,当我试图把year, month, day.一个year, month, day.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
Run Code Online (Sandbox Code Playgroud)

为何如此讨厌?

怎么解决?

python中的标记是什么意思?

Tuo*_*nen 56

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

05
0123
Run Code Online (Sandbox Code Playgroud)

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

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

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

0o10
0o4
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • @brainLoop:它已经说 SyntaxError 了。“无效令牌”是一种语法错误。 (2认同)

che*_*ner 14

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

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

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