13

为什么我不能让 008 或 009 成为 Python dict 的键,但 001-007 没问题?例子:

some_dict = {
    001: "spam",
    002: "eggs",
    003: "foo",
    004: "bar",
    008: "anything", # Throws a SyntaxError
    009: "nothing"   # Throws a SyntaxError
    }

更新:问题解决了。我不知道以零开头的文字使它变成八进制。这看起来真的很奇怪。为什么是零?

4

5 回答 5

28

在 python 和其他一些语言中,如果以 0 开头的数字,则该数字被解释为八进制(以 8 为基数),其中只有 0-7 是有效数字。您必须将代码更改为:

some_dict = { 
    1: "spam",
    2: "eggs",
    3: "foo",
    4: "bar",
    8: "anything",
    9: "nothing" }

或者,如果前导零非常重要,请使用字符串作为键。

于 2009-06-14T02:16:52.900 回答
10

Python 将 008 和 009 作为八进制数,因此...无效。

您只能上到 007,然后下一个数字将是 010 (8),然后是 011 (9)。在 Python 解释器中尝试一下,你就会明白我的意思。

于 2009-06-14T02:16:19.470 回答
8

在 Python(和许多其他语言)中,以“0”开头的数字表示八进制数(以 8 为基数)。使用这种前导零表示法称为八进制文字。八进制数为 0、1、2、3、4、5、6、7、10、11 等。因此08(八进制)无效

如果您删除前导零,您的代码会很好:

some_dict = 
{ 
    1: "spam",
    2: "eggs",
    3: "foo",
    4: "bar",
    8: "anything",
    9: "nothing" 
}
于 2009-06-14T02:16:33.057 回答
7

@DoxaLogos 是对的。并不是说它们是无效的键——它们是无效的文字。如果您尝试在任何其他上下文中使用它们,您会得到同样的错误。

于 2009-06-14T02:17:12.900 回答
2
于 2009-06-14T02:17:38.467 回答