2 votes

Le format de Python ne fonctionne pas avec du texte contenant du JSON

Ce code :

'From {"value": 1}, value={value}'.format(value=1)

Les échecs sont les suivants (Python 2.7.12 et Python 3.6.x) :

Traceback (most recent call last):
  File "test_format.py", line 1, in <module>
    'From {"value": 1}, value={value}'.format(value=1)
KeyError: '"value"

L'interpréteur Python se plaint que "value" n'a pas été passé dans les arguments pour format méthode.

Mais selon le syntaxe de la chaîne de format :

replacement_field ::=  "{" [field_name] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
arg_name          ::=  [identifier | integer]
attribute_name    ::=  identifier
element_index     ::=  integer | index_string
index_string      ::=  <any source character except "]"> +
conversion        ::=  "r" | "s"
format_spec       ::=  <described in the next section>

El champ_de_remplacement qui, dans ce cas, est composé d'une identifiant Je n'aurais pas dû. guillemets . Voici la définition lexicale d'un identifiant :

identifier ::=  (letter|"_") (letter | digit | "_")*
letter     ::=  lowercase | uppercase
lowercase  ::=  "a"..."z"
uppercase  ::=  "A"..."Z"
digit      ::=  "0"..."9"

Donc selon la spécification, {value} doit être reconnu comme un identifiant de chaîne de format valide et {"value"} doivent être ignorés.

Python semble ne pas suivre les spécifications de la documentation. Tout ce qui se trouve à l'intérieur des clés est accepté comme identifiant .

Pourquoi python se comporte-t-il ainsi ? Qu'est-ce qui m'échappe ici ?

3voto

Si vous voulez avoir des crochets réels {} dans votre sortie, vous devez faire ceci :

'{{"value": 1}}, {}'.format(0)

Le format traite tout ce qui est entre parenthèses {} comme arguments. Les parenthèses vides signifient des valeurs positionnelles, tout le reste est traité comme un argument de mot-clé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X