2010-06-03 19 views
6

मुझे कुछ बेवकूफ करना होगा। मैं Google अनुप्रयोग इंजन में इस चल रहा हूँ:पायथन: नाम त्रुटि: 'स्वयं' परिभाषित नहीं किया गया है

Traceback (most recent call last): 
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3192, in _HandleRequest 
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3135, in _Dispatch 
    base_env_dict=env_dict) 
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 516, in Dispatch 
    base_env_dict=base_env_dict) 
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2394, in Dispatch 
    self._module_dict) 
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2304, in ExecuteCGI 
    reset_modules = exec_script(handler_path, cgi_path, hook) 
    File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2200, in ExecuteOrImportScript 
    exec module_code in script_module.__dict__ 
    File "main.py", line 22, in <module> 
    class MainHandler(webapp.RequestHandler): 
    File "main.py", line 38, in MainHandler 
    self.writeOut(template.render(path, template_data)) 
NameError: name 'self' is not defined 

क्या मैं गलत कर रहा हूँ:

class MainHandler(webapp.RequestHandler): 

    def render(self, template_name, template_data): 
     path = os.path.join(os.path.dirname(__file__), 'static/templates/%s.html' % template_name) 
     self.response.out.write(template.render(path, template_data)) # error here 

    def get(self): 
     self.response.out.write("hi") 

def main(): 
    application = webapp.WSGIApplication([('/', MainHandler)], 
             debug=True) 
    util.run_wsgi_app(application) 


if __name__ == '__main__': 
    main() 

यह एक त्रुटि देता है?

+3

आप यह सुनिश्चित करें कि कोड स्निपेट स्टैक ट्रेस से मेल खाती है प्रदान की हैं? कम से कम मुझे गलती पर एक अंतर दिखाई देता है। – nkrkv

उत्तर

20

कक्षा को परिभाषित करते समय अपवाद हो रहा है, जिसका अर्थ है कि आपका इंडेंटेशन बंद है। पायथन में टैब 8 रिक्त स्थान के बराबर हैं, इसलिए यदि सभी पिछली पंक्तियां टैब का उपयोग कर रही हैं और आपकी टैबस्टॉप 4 रिक्त स्थान पर सेट की गई है तो इंडेंटेशन केवल सही दिखता है।

+0

8 रिक्त स्थान एक अपमान है। यह होना चाहिए 5. – detly

+3

@detly एक टैब 0 रिक्त स्थान होना चाहिए। तब आप उन्हें नहीं देख सकते, और इस तरह वे चोट नहीं पहुंचा सकते हैं, है ना? :-) – extraneon

1

google style guide सहित पाइथन के लिए अधिकांश स्टाइल गाइड, आपको टैब की बजाय रिक्त स्थान का उपयोग करने की सलाह देते हैं ... अधिकांश टेक्स्ट एडिटर्स इसका भी समर्थन करते हैं। इस तरह की गलतियों से बचने में आपकी मदद करता है।

+0

आप ऐसी त्रुटियों को खोजने के लिए 'pep8' स्क्रिप्ट का उपयोग भी कर सकते हैं या' -tt' विकल्प के साथ पायथन चला सकते हैं। – Philipp

3

बस अगर कोई इस पर होता है और इंडेंटेशन के साथ कोई समाधान नहीं ढूंढ रहा है, तो यह self का उपयोग करने के लिए एक अच्छा संदर्भ है।

NameError: name 'self' is not defined

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