将变量传递给以“ 0”开头的python函数会引发语法错误

时间:2018-06-21 13:47:41

标签: python python-3.x

>>> 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中此错误的相关文档?

1 个答案:

答案 0 :(得分:1)

过去(在Python <= 2中),带前导零的整数文字被解释为八进制文字(以8为底的数字)。因此011等于9。这是其他语言(例如C)的约定,但现在已经很少人使用它了(在过去,使用base-8算术更为普遍的做法很有用)。

这在不期望这种行为的人中引起了一些困惑,并且最终得到了他们从看起来有效的文字中不期望的整数。因此,当Python 3发布时,他们决定为八进制文字0o717采用一种新的语法,该语法看起来更像其他基数二进制0b0101和十六进制0x5A2C的文字(这些数字不相关)。

为防止混淆,将旧的八进制语法设为SyntaxError,以防止在Python 3中使用旧代码并产生错误的结果。您可以在PEP 3127

中阅读有关此决定的更多信息