21 python syntax-error python-3.x
我刚刚在我的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
Run Code Online (Sandbox Code Playgroud)
现在,我已经看到了这个,但正如链接所说,对于八进制的0在python中不再起作用(即在python3中不起作用).但这不意味着应该正确解释以0开头的数字的行为吗?在base-2中还是在正常的base-10表示中?既然不是这样,为什么python表现得那样呢?这是一个实施问题吗?或者这是一个语义问题?
mgi*_*son 31
我的猜测是,因为012python3.x中不再是八进制文字常量,所以它们不允许使用012语法来避免奇怪的向后兼容性错误.考虑使用八进制文字常量的python2.x脚本:
a = 012 + 013
Run Code Online (Sandbox Code Playgroud)
然后你将它移植到python 3它仍然有效 - 它只是给你a = 25而不是a = 21你以前的预期(十进制).有乐趣追踪那个bug.
Col*_*nic 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
Run Code Online (Sandbox Code Playgroud)
在Python 3.x中,这是一个语法错误,正如您所发现的:
Python 3.3.0
>>> 010
File "<stdin>", line 1
010
^
SyntaxError: invalid token
Run Code Online (Sandbox Code Playgroud)
你仍然可以转换为前导零的字符串:
>>> int("010")
10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8003 次 |
| 最近记录: |