Python: NameError: 'self' не определено - PullRequest
6 голосов
/ 03 июня 2010

Я должен делать что-то глупое. Я запускаю это в Google App Engine:

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

Это выдает ошибку:

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

Что я делаю не так?

Ответы [ 3 ]

20 голосов
/ 03 июня 2010

Исключение происходит во время определения класса, что означает, что отступы отключены. Вкладки в Python эквивалентны 8 пробелам, поэтому, если во всех предыдущих строках используются вкладки, а для вкладки табуляции задано 4 пробела, тогда только отступ = выглядит правильным.

3 голосов
/ 25 сентября 2013

На случай, если кто-то случится с этим и будет искать решение, не связанное с отступом, это хороший пример того, как и когда использовать self.

NameError: имя 'self' не определено

1 голос
/ 05 июня 2010

В большинстве руководств по стилю для python, включая руководство по стилю google , рекомендуется использовать пробелы вместо вкладок ... большинство текстовых редакторов также поддерживают это. Помогает вам избежать подобных ошибок.

...