Получите непротиворечивую ключевую ошибку: \n

При попытке запустить скрипт, содержащий следующий код для генерации текстового блока:

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 ответ

Решение

Вам нужно удвоить { а также } символы, которые не являются заполнителями:

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

в противном случае Python видит {\n "Hello":"world",\n} заполнитель, где часть до : это имя заполнителя.

Из документа " Формат строки синтаксиса":

Строки формата содержат "замещающие поля", заключенные в фигурные скобки {}, Все, что не содержится в фигурных скобках, считается буквальным текстом, который копируется без изменений в выходные данные. Если вам нужно включить символ скобки в буквальный текст, его можно избежать путем удвоения: {{ а также }} ,

(акцент мой).

Другие вопросы по тегам