【问题标题】:leading zeros in python [duplicate]python中的前导零[重复]
【发布时间】:2013-03-03 09:28:19
【问题描述】:

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

a = 04

在解释器中工作,但

a = 08

返回

SyntaxError: invalid token

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

【问题讨论】:

标签: python python-2.7 syntax-error


【解决方案1】:

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

在 Python 3 中更糟糕的是,无论您使用哪个数字,前导零都是语法错误。请参阅“新八进制文字”下的 What’s New In Python 3.0。还有PEP 3127

【讨论】:

  • 在 Python3 中,现在的语法是 0o123
  • 我认为它在 Python 3 中更好,因为那时 OP 的那种混乱甚至不会出现。
  • 这太疯狂了。非常感谢您的回答!
  • @user2171504:C 和许多其他语言(甚至一些 shell 程序)使用这种语法。所以,这不是绝对疯狂。然而,它让初学者感到困惑——这就是 Python 3.0 最终取消它的原因。 (C 也是十六进制的0x1f 语法的来源,八进制的新0x123 语法显然基于相同的想法。)
  • @MarkRansom:您忘记了 Python 必须对来自 C 系列语言的程序员、在 chmod 上花费比 python 更多时间的系统管理员,当然还有长期使用 Python 2.x程序员,而不是只是“普通人”。对此有过争论;这不是 Guido 孤立地决定的事情。如果你不能做人们期望的事情,那么犯错总比做错事要好。而如果 60% 的期望和 30% 的期望是直接矛盾的,你就无法做到人们期望的那样。
【解决方案2】:

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

在这里找到:Python: Invalid Token

【讨论】:

  • 请注意 40 != 040,即使两者都是有效的文字。
猜你喜欢
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 2011-03-28
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多