我在python的错误案例中有一个问题。我在这里试过....
>>> 0o08
SyntaxError: invalid syntax
>>> 0o8
SyntaxError: invalid token
我想知道:
0
,o
或8
? 0o08
语法无效?答案 0 :(得分:7)
以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