2013-04-12 62 views
4

一个语法错误,为什么当01在Python交互模式,并按下进入键入像01一些给人以语法错误为什么像01多家给出了Python交互模式

00输入解释计算结果为0,但是像01001或任何其与0开始数字输入语法错误:显示无效令牌。

在提示符下输入评估板以1,000(1,0)1,001一个元组不计算为(1,1)代替语法错误显示。

为什么Python解释器的行为如此?

+0

它做01时不会产生语法错误。解释器给出了1. –

+0

@limelights它取决于Python的版本。 '2.7'给出1,'3.2'给我一个语法错误。 – Yuushi

+0

@Yuushi啊,我还不熟悉Python 3。我不知道他们放弃了八进制文字。 –

回答

10

历史上,以零开头的整数文字表示八进制数字。这has been abolished in Python 3,并用不同的语法(0o...)取代。

旧的语法不再接受,except when the number consists entirely of zeros

Python 3.3.0 (default, Dec 1 2012, 19:05:43) 
>>> 0 
0 
>>> 00 
0 
>>> 01 
    File "<stdin>", line 1 
    01 
    ^
SyntaxError: invalid token 
+3

+1,并链接到文档的解释:http://www.python.org/dev/peps/pep-3127/#removal-of-old-octal-syntax – Yuushi

+0

@Yuushi:完成,谢谢你的链接。 – NPE

+0

当数字完全由零组成时,你知道它为什么存在吗? – jamylak

2

在Python 2.x中,在字面的整数前导零意味着它被解释为八进制。对于Python 3而言,这被删除了,这需要前缀0o。文字中的前导零作为语法错误留下,以便依靠旧行为的旧代码大声打破,而不是默默地给出“错误”的答案。

+0

你知道为什么该功能可能被删除吗?...在​​大多数语言中0前缀数字是八进制.. –

+0

@GrijeshChauhan:理由在PEP中解释:http://www.python.org/dev/peps/pep-3127 /#去除旧的八进制语法 – NPE

+0

@NPE感谢您的链接:) –

相关问题