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

  1. 为什么会这样?

  2. 我如何解决它?

  3. token 在 Python 中是什么意思?

原文由 zerocool 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 467
2 个回答

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

 05
0123

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

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

在 Python 3 中,八进制的语法更改为:

 0o10
0o4

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

至于您的其他问题,Python 中的令牌是 Python 解释器将您的代码分成块的方式,以便它可以理解它(请参阅 此处)。在这里,当分词器尝试拆分您的代码时,它不希望在那里看到零,因此会抛出错误。

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

原文由 Tuomas Laakkonen 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

原文由 chepner 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题