【问题标题】:Python: NameError: 'self' is not definedPython:NameError:'self'未定义
【发布时间】:2011-02-27 03:57:23
【问题描述】:

我一定是在做一些愚蠢的事情。我在 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

我做错了什么?

【问题讨论】:

  • 您确定提供的代码 sn-p 对应于堆栈跟踪吗?至少我看到了 err-line 的不同。

标签: python google-app-engine nameerror


【解决方案1】:

在定义类时发生异常,这意味着您的缩进已关闭。 Python 中的制表符相当于 8 个空格,所以如果前面的所有行都使用制表符并且您的制表位设置为 4 个空格,那么缩进只有 看起来正确。

【讨论】:

  • 8 个空格太离谱了。应该是 5。
  • @detly 制表符应该是 0 个空格。那么你看不到它们,因此它们不会受到伤害,对吧? :-)
【解决方案2】:

以防万一有人遇到这种情况并正在寻找与缩进无关的解决方案,这是如何/何时使用 self 的一个很好的参考。

NameError: name 'self' is not defined

【讨论】:

    【解决方案3】:

    大多数 Python 风格指南,包括 google style guide,建议您使用空格而不是制表符……大多数文本编辑器也支持这一点。帮助您避免此类错误。

    【讨论】:

    • 您也可以使用pep8 脚本或使用-tt 选项运行Python 来查找此类错误。
    猜你喜欢
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多