【问题标题】:SyntaxError invalid tokenSyntaxError 无效令牌
【发布时间】:2016-07-23 00:46:12
【问题描述】:

我在尝试为变量赋值时遇到问题。当我尝试按以下顺序将日期作为元组或列表放置时,问题就出现了: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 中是什么意思?

【问题讨论】:

  • 04 对 python 没有任何意义,尝试使用 43 不为零!
  • 是的,它可以工作,但为什么它在踢零时工作
  • 04 确实对 python 有意义,它在 python 2.x 中表示八进制数
  • 尝试将 04 用引号括起来,例如“04”
  • @zixrobert,您使用的是哪个 Python 版本?这似乎在 2.7 中工作正常

标签: python python-3.x syntax


【解决方案1】:

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

05
0123

等等。不允许,但应改为5123

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

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

0o10
0o4

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

至于您的另一个问题,Python 中的标记是 Python 解释器将您的代码分成块的方式,以便它可以理解它(请参阅here)。在这里,当标记器尝试拆分您的代码时,它不希望在那里看到零,因此会引发错误。

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

【讨论】:

  • 为什么错误不是“语法错误”而是“无效令牌”?
  • @brainLoop:它已经说 SyntaxError。 “invalid token”是一种语法错误。
  • @user2357112 我的意思是说,为什么不是“SyntaxError: invalid syntax” 而不是“SyntaxError: invalid token”
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    问题是 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

    【讨论】:

    • 您应该解释为什么会出现错误。这是OP的问题之一。这对他们帮助不大。
    • 是的,我知道,但是当我使用 04 和 03 时为什么会报错
    • @zixrobert 只需阅读另一个答案。它实际上解释了它。
    【解决方案4】:

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

    Python 解释器将整个脚本分成不同的部分,这些部分称为标记。在这里,08 将被视为令牌,因此它是八进制且在此数字系统中无效,因此会发生这种错误。

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

    【讨论】:

      【解决方案5】:

      此错误可能出现“SyntaxError 无效令牌”(与问题无关,但这就是我得到这个问题的方式)的另一个原因是 python 变量是否以数字开头。以下是 Python 中的其他一些命名约定,https://www.python.org/dev/peps/pep-0484/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-12
        • 1970-01-01
        • 2021-08-14
        • 2021-09-21
        • 2020-07-12
        • 2017-09-29
        • 2018-12-03
        • 1970-01-01
        相关资源
        最近更新 更多