Skip to main content
 首页 » 编程设计

python之无效的 token 和无效的语法

2025年05月04日14jyk

我有一个关于 python 错误案例的问题。我在这里试过....

>>> 0o08 
SyntaxError: invalid syntax 
>>> 0o8 
SyntaxError: invalid token 

我想知道:

  • 哪个是无效 token ,0、o 或 8?
  • 为什么 0o08 语法无效?

请您参考如下方法:

以0o 开头的整数文字被解释为octal .每the documentation :

octinteger     ::=  "0" ("o" | "O") octdigit+  # '0o' or '0O' followed by one or more... 
...  
octdigit       ::=  "0"..."7"                  # ...digits 0 to 7 inclusive 

标记 8 不是有效的 octdigit,因此不允许出现在八进制文字中,因此 “无效标记”。


错误消息不同的原因是(与 Python 的 LL(1) 解析器有关,它一次只向前看一个标记):

  • 如果0o 之后的第一个标记 不是octdigit,那显然是一个无效标记并且解析会立即停止;而
  • 如果后续标记碰巧无效,则不会在早期阶段检测到这种情况,解析会继续进行,直到整行作为无效语法被拒绝为止。

您可以在 IDLE 中的突出显示中看到这种差异(仅 0o 突出显示与突出显示整行),如果您尝试一些替代方法:

>>> 0ok  # first token is invalid 
SyntaxError: invalid token 
>>> 0o18  # subsequent token is invalid 
SyntaxError: invalid syntax 
>>> 0o10  # all tokens are valid 
8