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

时间:2015-08-26 10:30:51

标签: 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")

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

当我删除format一切正常时,我需要它动态输入参数 (最初它驻留在一个循环中)

1 个答案:

答案 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

  

格式字符串包含由大括号{}包围的“替换字段”。大括号中未包含的任何内容都被视为文本文本,它将不加改变地复制到输出中。 如果您需要在文字文字中加入大括号字符,则可以通过加倍来对其进行转义:{{}}

(强调我的)。