Python: NameError: 'я' не определено

Я, должно быть, делаю что-то глупое. Я запускаю это в 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

Что я делаю неправильно?


person Nick Heiner    schedule 03.06.2010    source источник
comment
Вы уверены, что предоставленный фрагмент кода соответствует трассировке стека? По крайней мере, я вижу разницу по err-строке.   -  person nkrkv    schedule 03.06.2010


Ответы (3)


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

person Ignacio Vazquez-Abrams    schedule 03.06.2010
comment
8 пробелов - это безобразие. Должно быть 5. - person detly; 03.06.2010
comment
@detly В табуляции должно быть 0 пробелов. Тогда вы не можете их видеть, и поэтому они не могут причинить вреда, верно? :-) - person extraneon; 03.06.2010

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

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

person nihiser    schedule 24.09.2013

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

person Sudhir Jonathan    schedule 05.06.2010
comment
Вы также можете использовать сценарий pep8 или запустить Python с параметром -tt, чтобы найти такие ошибки. - person Philipp; 05.06.2010