我刚刚在我的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
现在,我已经看到this但是正如链接所说,对于八进制的0在python中不再起作用(即在python3中不起作用)。但这不意味着应该正确解释以0开头的数字的行为吗?在base-2中还是在正常的base-10表示中?既然不是这样,为什么python表现得那样呢?这是一个实施问题吗?或者这是一个语义问题?
答案 0 :(得分:31)
我的猜测是,因为012
不再是python3.x中的八进制文字常量,所以它们不允许使用012
语法来避免奇怪的向后兼容性错误。考虑使用八进制文字常量的python2.x脚本:
a = 012 + 013
然后你将它移植到python 3并且它仍然可以工作 - 它只是给你a = 25
而不是你预期的a = 21
(十进制)。有乐趣追踪那个错误。
答案 1 :(得分:15)
来自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