Получите непротиворечивую ключевую ошибку: \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}
заполнитель, где часть до :
это имя заполнителя.
Из документа " Формат строки синтаксиса":
Строки формата содержат "замещающие поля", заключенные в фигурные скобки
{}
, Все, что не содержится в фигурных скобках, считается буквальным текстом, который копируется без изменений в выходные данные. Если вам нужно включить символ скобки в буквальный текст, его можно избежать путем удвоения:{{
а также}}
,
(акцент мой).