我只是执行下面的程序在我的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八没有任何更多的蟒蛇工作(即不python3工作)。 但是,就等于说,对于从0开始编号的行为应该得到正确解释? 无论是在碱-2或在正常碱基10表示? 由于它不是这样,为什么不蟒蛇那样做的? 它是一个执行问题? 或者它是一个语义问题?
我的猜测是,由于012
是不再python3.x一个八进制字面常量,他们不允许的012
语法,以避免奇怪的向后兼容性错误。 考虑其使用的八进制常量您python2.x脚本:
a = 012 + 013
然后,你将它移植到Python 3,它仍然有效-它只是给你a = 25
,而不是a = 21
,你之前的预期(十进制)。 玩得开心跟踪这个bug。
从Python 3发行说明http://docs.python.org/3.0/whatsnew/3.0.html#integers
八进制文字不再是形式的0720
; 使用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
您仍可以从使用前导零和从前一样的字符串转换:
>>> int("010")
10
文章来源: Python cannot handle numbers string starting with 0. Why?