Python不能处理从0开始的数字串。为什么?

我只是在我的python解释器上执行下面的程序:

>>> def mylife(x): ... if x>0: ... print(x) ... else: ... print(-x) ... >>> mylife(01) File "<stdin>", line 1 mylife(01) ^ SyntaxError: invalid token >>> mylife(1) 1 >>> mylife(-1) 1 >>> mylife(0) 0 

现在,我已经看到了这一点,但正如链接所说,八进制的0不再在python中工作(即不能在python3中工作)。 但是,这是否意味着以0开头的数字的行为应该被正确地解释? 是以2为基数还是以10为基数的正常表示? 既然不是这样,为什么python的行为呢? 这是一个执行问题吗? 或者这是一个语义问题?

我的猜测是,因为012不再是python3.x中的八进制文字常量,所以他们不允许012语法来避免奇怪的向后兼容性错误。 考虑使用八进制文字常量的python2.x脚本:

 a = 012 + 013 

然后你把它移植到python 3,它仍然有效 – 它只是给你a = 25而不是像你以前预期的(十进制) a = 21 。 玩得开心追踪这个错误。

从Python 3发行说明http://docs.python.org/3.0/whatsnew/3.0.html#integers

八进制文字不再是0720的forms; 改用0o720

Python 2.x中八进制文字的“前置零”语法是一个常见的问题:

 Python 2.7.3 >>> 010 8 

在Python 3.x中,这是一个语法错误,正如你发现的那样:

 Python 3.3.0 >>> 010 File "<stdin>", line 1 010 ^ SyntaxError: invalid token 

你仍然可以从string转换为前导零的字符:

 >>> int("010") 10