获得一致的密钥错误:\n

Jav*_*aSa 4 python keyerror

尝试运行包含以下代码的脚本以生成文本块时:

from textwrap import dedent

text = dedent("""\
   yada yada '1' ('2','3',4') 
   ('{0}', Null, '{1}',
   '{
      "Hello":"world",
    }', '1', '{2}');""").format("yada1","yada2","yada3")
Run Code Online (Sandbox Code Playgroud)

我得到一致的错误KeyError '\n "Hello"
并追溯指向的线.format().

当我删除format一切都没问题,但我需要它动态输入参数.
(最初它位于循环内)

Mar*_*ers 10

您需要将非占位符{}字符加倍:

text = dedent("""\
   yada yada '1' ('2','3',4') 
   ('{0}', Null, '{1}',
   '{{
      "Hello":"world",
    }}', '1', '{2}');""").format("yada1","yada2","yada3")
Run Code Online (Sandbox Code Playgroud)

否则Python会看到{\n "Hello":"world",\n}占位符,其中的部分:是占位符名称.

格式字符串语法文档:

格式字符串包含由大括号括起的"替换字段" {}.大括号中未包含的任何内容都被视为文本文本,它将不加改变地复制到输出中.如果你需要在文字文本中包含一个大括号字符,可以通过加倍来转义它:{{}}.

(强调我的).