2012-03-08 12 views
34

निम्नलिखित कोड का टुकड़ा फेंक:अजगर प्रारूप KeyError

Traceback (most recent call last): File "createController.py", line 31, in <module> 
    });".format(className=className) KeyError: ' app' 

कोई पता है क्यों:

template = "\                     
function routes(app, model){\                 
    app.get('/preNew{className}', function(req, res){\           
    res.render('{className}'.ejs, {});\              
    });\                      
});".format(className=className) 

एक KeyError फेंकता है?

+8

आपको सभी घुंघराले ब्रेसिज़ को दोगुना करने की आवश्यकता है जिन्हें प्रारूपित नहीं किया जाना चाहिए। –

+1

क्या आप [मल्टीलाइन स्ट्रिंग्स] (http://docs.python.org/tutorial/introduction.html#strings) पर आ गए हैं? यदि आप ट्रिपल-कोट्स का उपयोग करते हैं, तो आपको प्रत्येक नई लाइन से बचने की ज़रूरत नहीं है। – katrielalex

+0

[str.format() का संभावित डुप्लिकेट काम नहीं करता है, keyError] (http://stackoverflow.com/questions/2755201/str-format-does-not-work-keyerror) – luator

उत्तर

50

आपके पास उस कोड में कई अनसुलझे ब्रेसिज़ हैं। पायथन सभी ब्रेसिज़ को प्लेसहोल्डर मानते हैं और उन्हें सभी को बदलने की कोशिश कर रहे हैं। हालांकि, आपने केवल एक मूल्य प्रदान किया है।

मुझे उम्मीद है कि आप नहीं चाहते हैं कि आपके सभी ब्रेसिज़ प्लेसहोल्डर्स हों, इसलिए आपको उन लोगों को दोगुना करना चाहिए जिन्हें आप प्रतिस्थापित नहीं करना चाहते हैं। जैसे:

template = """                 
function routes(app, model){{ 
    app.get('/preNew{className}', function(req, res){{ 
    res.render('{className}'.ejs, {{}});           
    }};              
}});""".format(className=className) 

मैं भी स्ट्रिंग शाब्दिक के लिए ट्रिपल कोट्स का उपयोग कर ताकि आप प्रत्येक पंक्ति के अंत में बैकस्लैश की जरूरत नहीं है की स्वतंत्रता ले लिया।

संबंधित मुद्दे