问题
When trying to run a script containing the following code for generating text block:
from textwrap import dedent
text = dedent("""\
yada yada '1' ('2','3',4')
('{0}', Null, '{1}',
'{
"Hello":"world",
}', '1', '{2}');""").format("yada1","yada2","yada3")
I get consistent error KeyError '\n "Hello"
and trace back pointing at the line of the .format()
.
When I remove the format
everything is ok, but I need it to enter parameters dynamically.
(Originally its reside inside a loop)
回答1:
You need to double the {
and }
characters that are not placeholders:
text = dedent("""\
yada yada '1' ('2','3',4')
('{0}', Null, '{1}',
'{{
"Hello":"world",
}}', '1', '{2}');""").format("yada1","yada2","yada3")
otherwise Python sees a {\n "Hello":"world",\n}
placeholder, where the part up to the :
is the placeholder name.
From the Format String Syntax documenattion:
Format strings contain “replacement fields” surrounded by curly braces
{}
. Anything that is not contained in braces is considered literal text, which is copied unchanged to the output. If you need to include a brace character in the literal text, it can be escaped by doubling:{{
and}}
.
(emphasis mine).
来源:https://stackoverflow.com/questions/32224197/get-consistent-key-error-n