Python:NameError:'self'未定义。

6

我一定是做了什么傻事。我正在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
你确定提供的代码片段对应堆栈跟踪吗?至少我在err-line上看到了一个不同之处。 - nkrkv
3个回答

20

异常是在定义类时发生的,这意味着您的缩进有误。在Python中,制表符等价于8个空格,因此如果所有前面的行都使用制表符,并且您的制表位设置为4个空格,则缩进只是看起来正确。


8个空格太多了,应该是5个。 - detly
3
一个制表符应该是0个空格。这样你就看不见它们,所以它们也就不会造成伤害,对吧? :-) - extraneon

3

1

大多数 Python 的风格指南,包括 Google 风格指南,都建议您使用空格而不是制表符... 大多数文本编辑器也支持这一点。这有助于避免像这样的错误。


你也可以使用 pep8 脚本或者在运行 Python 时加上 -tt 选项来查找这样的错误。 - Philipp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接