为什么008和009的Python dicts无效键?

Eva*_*ark 13 python dictionary python-2.x

为什么我不能将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
    }
Run Code Online (Sandbox Code Playgroud)

更新:问题解决了.我不知道启动一个零的文字使它成为八进制.这看起来很奇怪.为什么零?

Jac*_*cob 28

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

some_dict = { 
    1: "spam",
    2: "eggs",
    3: "foo",
    4: "bar",
    8: "anything",
    9: "nothing" }
Run Code Online (Sandbox Code Playgroud)

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

  • 我真的,真的希望K&R没有提出八进制的惯例(我认为是他们)... (4认同)

Jay*_*son 10

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

你最多只能到007,然后下一个数字是010(8)然后是011(9).在Python解释器中尝试它,你会明白我的意思.


Rob*_*ino 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" 
}
Run Code Online (Sandbox Code Playgroud)


Bla*_*rad 7

@DoxaLogos是对的.并不是说它们是无效的密钥 - 它们是无效的文字.如果您尝试在任何其他上下文中使用它们,您将得到相同的错误.