为什么python print(09)给出了SyntaxError:无效令牌但不打印(07)?

时间:2017-11-09 02:56:42

标签: python syntax-error

这是我系统上安装的Python版本。

Python 2.7.14 |Anaconda, Inc.| (default, Oct 16 2017, 17:29:19) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.

不知何故,08,99在8,9不明白。但其他数字工作

>>> print(02)
2
>>> print(09)
  File "<stdin>", line 1
    print(09)
           ^
SyntaxError: invalid token
>>> print(08)
  File "<stdin>", line 1
    print(08)
           ^
SyntaxError: invalid token
>>> print(07)
7

不仅打印,而且datetime.date也会抛出SyntaxError

>>> import datetime
>>> datetime.date(2017,11,09)
  File "<stdin>", line 1
    datetime.date(2017,11,09)
                           ^
SyntaxError: invalid token
>>> datetime.date(2017,11,04)
datetime.date(2017, 11, 4)
>>> 

1 个答案:

答案 0 :(得分:3)

Python 2.x上以0开头(并且后面没有xb)的整数文字是octal literals(为了将来的兼容性,{ {1}}前缀也表示八进制文字,它是Py3中唯一接受的形式,拒绝所有“普通”0o前缀0文字以避免人们混淆谁可能会尝试C八进制语法)。 Octal只有从0到7的数字,因此int在八进制中是无意义的,9显式请求它被解释为八进制,因此错误。

简而言之,请勿尝试使用前导09填充int文字。它改变了意义,而不仅仅是外观。