Hi,
When I run this piece of code:
'From {"value": 1}, value={value}'.format(value=1)
Python complains about the missing "value" parameter (2.7.12 and 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"
But according to the format string syntax
(https://docs.python.org/2/library/string.html):
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>
The replacement_field, which in this case, is composed by an identifier,
shouldn't have quotation marks. Here is the lexical definition for an
identifier (according to the documentation):
identifier ::= (letter|"_") (letter | digit | "_")*
letter ::= lowercase | uppercase
lowercase ::= "a"..."z"
uppercase ::= "A"..."Z"
digit ::= "0"..."9"
So according to the specification, {value} should be recognized as a valid
format string identifier and {"value"} should be ignored.
Python seems to not follow the specification in the documentation. Anything
inside the keys is accepted as identifier.
--
https://mail.python.org/mailman/listinfo/python-list