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))

क्यों?

मैं पायथन 3.1 का उपयोग कर रहा हूं।


1
आप शायद सूची enumerateबोध ( इंडोल प्राप्त करने के लिए उपयोग ) के साथ एक ही कार्य पूरा कर सकते हैं ।
स्विफ्टनामेस

इन्हें भी देखें (डुप्लिकेट) stackoverflow.com/questions/35574349/...
dreftymac

जवाबों:


144

समस्या उन {और }पात्रों की है जो आपके पास हैं जो प्रारूपण के लिए एक कुंजी निर्दिष्ट नहीं करते हैं। आपको उन्हें दोगुना करने की आवश्यकता है, इसलिए अपना कोड यहां बदलें:

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

12
क्या होगा अगर कोई पायथन में JSON का उपयोग करना चाहता है?
फिजियारोन

4
@fijiaaron {जवाब में डबल सिर्फ formatविधि बताने के लिए है कि यहां प्रारूप की कोई कुंजी नहीं है (इसलिए वे तैयार किए गए स्ट्रिंग में बच गए हैं और इसे JSON बनाने के लिए कोई समस्या नहीं होनी चाहिए)। वैकल्पिक रूप से स्ट्रिंग्स में हेरफेर करने के लिए अन्य कुशल तरीके हैं, जैसे joinविधि:"".join(['{"', var_name, '":', value, '}'])
mgc

मैंने लगभग अपना दिमाग खो दिया जब तक कि समस्या का पता नहीं चला
दिमित्री कंकालोविच

1
@DmitryKankalovich आपने अपना दिमाग खो दिया है, स्टैक ओवरफ्लो, और यहां हर कोई, आपकी कल्पना का एक अनुमान मात्र है। (यह वही है जो मैं अपने आप को कम से कम बताता रहता हूं) :)
लास वी। कार्लसन जू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.