Следующий код вызывает KeyError
исключение:
addr_list_formatted = []
addr_list_idx = 0
for addr in addr_list: # addr_list is a list
addr_list_idx = addr_list_idx + 1
addr_list_formatted.append("""
"{0}"
{
"gamedir" "str"
"address" "{1}"
}
""".format(addr_list_idx, addr))
Почему?
Я использую Python 3.1.
enumerate
для получения индексов).Ответы:
Проблема в том, что у вас там есть
{
и}
символы, в которых не указан ключ для форматирования. Вам нужно удвоить их, поэтому измените свой код на:addr_list_formatted.append(""" "{0}" {{ "gamedir" "str" "address" "{1}" }} """.format(addr_list_idx, addr))
источник
{
в ответе - это просто сказатьformat
методу, что здесь нет ключа для форматирования (поэтому они экранируются в сформированной строке, и это не должно быть проблемой для создания JSON таким образом). В качестве альтернативы есть другие эффективные способы манипулирования строками, напримерjoin
метод:"".join(['{"', var_name, '":', value, '}'])