尝试运行包含以下代码的脚本以生成文本块时:
from textwrap import dedent
text = dedent("""\
yada yada '1' ('2','3',4')
('{0}', Null, '{1}',
'{
"Hello":"world",
}', '1', '{2}');""").format("yada1","yada2","yada3")
我得到了一致的错误KeyError '\n "Hello"
并追溯指向.format()
的线。
当我删除format
一切正常时,我需要它动态输入参数
(最初它驻留在一个循环中)
答案 0 :(得分:10)
您需要将不是占位符的{
和}
字符加倍:
text = dedent("""\
yada yada '1' ('2','3',4')
('{0}', Null, '{1}',
'{{
"Hello":"world",
}}', '1', '{2}');""").format("yada1","yada2","yada3")
否则Python会看到{\n "Hello":"world",\n}
占位符,其中:
的部分是占位符名称。
来自Format String Syntax documenattion:
格式字符串包含由大括号
{}
包围的“替换字段”。大括号中未包含的任何内容都被视为文本文本,它将不加改变地复制到输出中。 如果您需要在文字文字中加入大括号字符,则可以通过加倍来对其进行转义:{{
和}}
。
(强调我的)。