str.format ()은 KeyError를 발생시킵니다.


80

다음 코드는 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을 사용하고 있습니다.


1
목록 이해력으로 동일한 작업을 수행 할 수 있습니다 ( enumerateindeces를 얻기 위해 사용 ).
SwiftsNamesake

답변:


144

문제는 서식을위한 키를 지정하지 않은 문자 {}문자입니다. 두 배로 늘려야하므로 코드를 다음과 같이 변경하십시오.

addr_list_formatted.append("""
    "{0}"
    {{
    "gamedir"  "str"
    "address"  "{1}"
    }}
""".format(addr_list_idx, addr))

12
누군가 Python에서 JSON을 사용하고 싶다면 어떻게해야할까요?
fijiaaron

4
@fijiaaron the double {format여기에 형식을 지정할 키가 없다는 것을 메서드에 알리는 것입니다 (따라서 형식이 지정된 문자열에서 이스케이프 처리되므로 JSON을 빌드하는 데 문제가되지 않아야합니다). 또는 방법과 같이 문자열을 조작하는 다른 효율적인 방법이 있습니다 join."".join(['{"', var_name, '":', value, '}'])
mgc

나는 거의 생각 된 뭐죠 때까지 문제를 내 마음을 잃었
드미트리 Kankalovich에게

1
@DmitryKankalovich 당신은 당신의 마음을 잃었습니다, Stack Overflow, 그리고 여기있는 모든 사람들은 당신의 상상력의 산물 일뿐입니다. :) (즉, 나는 적어도 자신을 계속 말하고 무엇)
라세 V. 칼슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.