Python不能处理的数字串从0开始。为什么呢?(Python cannot handle numb

2019-06-18 14:17发布

我只是执行下面的程序在我的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表示? 由于它不是这样,为什么不蟒蛇那样做的? 它是一个执行问题? 或者它是一个语义问题?

Answer 1:

我的猜测是,由于012是不再python3.x一个八进制字面常量,他们不允许的012语法,以避免奇怪的向后兼容性错误。 考虑其使用的八进制常量您python2.x脚本:

a = 012 + 013

然后,你将它移植到Python 3,它仍然有效-它只是给你a = 25 ,而不是a = 21 ,你之前的预期(十进制)。 玩得开心跟踪这个bug。



Answer 2:

从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?