Python: NameError: 'self'未定义

6 投票
3 回答
10559 浏览
提问于 2025-04-15 23:29

我一定是做了什么傻事。我在谷歌应用引擎上运行这个:

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 个回答

1

大多数Python的编码规范,比如谷歌的编码规范,都建议你使用空格来缩进,而不是使用制表符(Tab键)。大部分文本编辑器也支持这种做法。这样可以帮助你避免一些常见的错误。

3

如果有人碰巧看到这个内容,并且在寻找一个跟缩进无关的解决方案,这里有一个很好的参考,讲解了如何以及何时使用 self

NameError: name 'self' is not defined

20

这个错误发生在定义类的时候,这说明你的缩进有问题。在Python中,制表符(Tab)相当于8个空格,所以如果前面的行都是用制表符,而你的制表符设置成了4个空格,那么缩进看起来是对的,其实并不对。

撰写回答