>>> def even_or_odd(n):
... if(n%2==0):
... print("even")
... else:
... print("odd")
...
>>> even_or_odd(10)
even
>>> even_or_odd(09)
File "<stdin>", line 1
even_or_odd(09)
^
SyntaxError: invalid token
>>> even_or_odd(9)
odd
在上面的代码中,当我通过'09'而不是9时,出现此错误。谁能指出我有关Python中此错误的相关文档?
答案 0 :(得分:1)
过去(在Python <= 2中),带前导零的整数文字被解释为八进制文字(以8为底的数字)。因此011
等于9
。这是其他语言(例如C)的约定,但现在已经很少人使用它了(在过去,使用base-8算术更为普遍的做法很有用)。
这在不期望这种行为的人中引起了一些困惑,并且最终得到了他们从看起来有效的文字中不期望的整数。因此,当Python 3发布时,他们决定为八进制文字0o717
采用一种新的语法,该语法看起来更像其他基数二进制0b0101
和十六进制0x5A2C
的文字(这些数字不相关)。
为防止混淆,将旧的八进制语法设为SyntaxError
,以防止在Python 3中使用旧代码并产生错误的结果。您可以在PEP 3127