Question

Pourquoi est-ce que je ne peux pas avoir 008 ou 009 pour être les clés d'un dict Python, mais 001-007 sont très bien? Exemple:

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

Mise à jour : Problème résolu. Je ne savais pas que, à partir d'un littéral avec un zéro fait octal. Cela semble vraiment bizarre. Pourquoi zéro?

Était-ce utile?

La solution

En python et quelques autres langues, si vous commencez un certain nombre avec un 0, le nombre est interprété comme étant en octal (base 8), où seulement 0-7 sont valides chiffres. Vous devez changer votre code à ceci:

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

Ou si les zéros sont vraiment importants, utiliser des chaînes pour les clés.

Autres conseils

Python prend 008 et 009 comme nombre octal, donc ... pas valide.

Vous ne pouvez aller jusqu'à 007, puis le prochain numéro serait 010 (8) puis 011 (9). Essayez-le dans un interpréteur Python, et vous verrez ce que je veux dire.

En Python (et beaucoup d'autres langues), à partir d'un nombre avec un "0" indique une (base 8) nombre octal . En utilisant cette notation avant-zéro est appelé octal littéral . nombres octaux vont 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, etc. Ainsi 08 (en octal) est invalide .

Si vous supprimez les zéros, votre code sera bien:

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

@DoxaLogos est exact. Ce n'est pas qu'ils sont les clés invalides - ils sont littéraux invalides. Si vous avez essayé de les utiliser dans un autre contexte, vous obtiendrez la même erreur.

C'est parce que, lorsque vous démarrez un numéro avec une 0, il est interprété comme un nombre octal. Depuis 008 et 009 ne sont pas des nombres octaux, il échoue.

A 0 précède un nombre octal afin que vous n'avez pas à écrire (127)₈. De Wikipedia : «Parfois nombre octal sont représentés par une valeur précédente avec un 0 (par exemple dans 2.x Python ou JavaScript 1.x - bien qu'il est maintenant dépréciée à la fois). "

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top