python中的前导零

python中的前导零,python,python-2.7,syntax-error,Python,Python 2.7,Syntax Error,Python似乎能够接受除08或09之外的任何数字的前导零。比如说, a = 04 在解释器中工作,但 a = 08 返回 SyntaxError: invalid token 我正在OSX上使用python 2.7.3,其他人已经能够复制错误。给出了什么?带前导零的数字被解释为八进制,其中数字8和9不存在 在Python3中更糟糕的是,无论使用哪种数字,前导零都是语法错误。请参阅“新八进制文字”下的。另外。当数字以0开头时,Python将其视为八进制。因此,虽然是,八进制04等于十进制0

Python似乎能够接受除08或09之外的任何数字的前导零。比如说,

a = 04
在解释器中工作,但

a = 08
返回

SyntaxError: invalid token

我正在OSX上使用python 2.7.3,其他人已经能够复制错误。给出了什么?

带前导零的数字被解释为八进制,其中数字
8
9
不存在


在Python3中更糟糕的是,无论使用哪种数字,前导零都是语法错误。请参阅“新八进制文字”下的。另外。

当数字以0开头时,Python将其视为八进制。因此,虽然是,八进制04等于十进制04,但八进制08甚至不存在(因为八进制数字只能在[0,7]范围内)


在这里可以找到:

在Python3中,语法现在是
0o123
。我认为它在Python3中要好得多,因为那时OP甚至没有出现那种混乱。这绝对是疯狂的。非常感谢你的回答@user2171504:C和许多其他语言(甚至一些shell程序)都使用这种语法。所以,这并不完全疯狂。然而,这让初学者感到困惑,这就是为什么Python3.0最终放弃了它。(C也是hex的
0x1f
语法的来源,octal的新
0x123
语法显然也是基于同样的想法。)@MarkRansom:你忘了Python对来自C族语言的程序员来说是有意义的,系统管理员比Python花更多的时间使用chmod,当然,长期的Python2.x程序员,而不仅仅是“普通人”。关于这一点有过争论;这不是Guido孤立决定的事情。如果你不能做人们期望的事情,犯错误总比做错事好。如果60%的期望值和30%的期望值是直接矛盾的,那么你就不能做人们期望的事情。相关:请注意,
a=044
“起作用”,但可能不会做你期望的事情。请注意,
40
!=<代码>040,即使两者都是有效的文字。