2010-05-02 27 views
43

Các mã sau đặt ra một ngoại lệ KeyError:str.format() tăng 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)) 

Tại sao?

Tôi đang sử dụng Python 3.1.

+1

Bạn có thể thực hiện cùng một nhiệm vụ với việc hiểu danh sách (sử dụng 'liệt kê' để nhận phân). – SwiftsNamesake

Trả lời

82

Sự cố là {và} ký tự bạn có ở đó không chỉ định khóa cho định dạng. Bạn cần phải tăng gấp đôi chúng, vì vậy hãy thay đổi mã thành:

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

Điều gì xảy ra nếu ai đó muốn sử dụng JSON bằng Python? – fijiaaron

+1

@fijiaaron double '{' trong câu trả lời chỉ là nói phương thức 'định dạng' mà không có khóa để định dạng ở đây (vì vậy chúng được thoát trong chuỗi được định dạng và không phải là vấn đề khi xây dựng JSON đường). Ngoài ra còn có các cách hiệu quả khác để thao tác các chuỗi, như phương thức 'join':' "" .join (['{"', var_name, '":', value, '}']) ' – mgc

Các vấn đề liên quan