Python 无法处理以 0 开头的数字字符串。为什么?
- 2025-02-28 08:22:00
- admin 原创
- 59
问题描述:
我刚刚在我的 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 会这样表现?这是一个实现问题吗?还是一个语义问题?
解决方案 1:
我的猜测是,由于012
在 python3.x 中不再是八进制文字常量,因此他们不允许使用这种012
语法,以避免奇怪的向后兼容性错误。考虑使用八进制文字常量的 python2.x 脚本:
a = 012 + 013
然后你将其移植到 Python 3,它仍然有效——只是给出的a = 25
不是a = 21
你之前预期的(十进制)。祝你追踪这个错误愉快。
解决方案 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
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD