Google App Engine Python:类定义“无效语法”

时间:2011-12-01 06:25:44

标签: python google-app-engine syntax-error

当我在dev_appserver中运行此代码时,它在第22行给出了“无效语法”错误,其中初始化了HugAPanda类。有人知道为什么会这样吗?这是代码:

import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class PandasHugs(db.Model):
  message = db.IntegerProperty()

class MainPage(webapp.RequestHandler):
    def get(self):
        ListOfHugs = db.GqlQuery("SELECT * FROM PandasHugs")
        Adder = 0
        for PandasHugs in ListOfHugs:
            Adder = Adder + 1
        self.response.out.write('<html><body>')
        self.response.out.write('<h6>Panda has ' + str(Adder) + ' hugs!</h6>')
        self.response.out.write("<form action=\"/HugPanda\" method=\"post\"><div><input type=\"text\" name=\"PandaMessage\" value=\"A message for a panda.\"></div><div><input type=\"submit\" value=\"Hug a panda?\"></div></form></body></html>">


class HugAPanda(webapp.RequestHandler):
    def post(self):
        HugForAPanda = PandaHugs()
        HugForAPanda.message = self.request.get('PandaMessage')
        HugForAPanda.put()
        self.redirect('/main')

application = webapp.WSGIApplication(
  [('/', MainPage), ('/main', MainPage), ('/HugPanda', HugAPanda)],
  debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

再次感谢! -Neil

2 个答案:

答案 0 :(得分:3)

上面一行中的语法无效。 (第15行看起来像)

self.response.out.write("<form action=\"/HugPanda\" method=\"post\"><div><input type=\"text\" name=\"PandaMessage\" value=\"A message for a panda.\"></div><div><input type=\"submit\" value=\"Hug a panda?\"></div></form></body></html>">

额外'&gt;'最后应该用')'替换。

这是遵循python约定并将行长度限制为79个字符的一个很好的理由。如果这是你组织的标准,我不会争论上升到120,但它肯定不应该按照它在这里呈现的方式编写:)

在这种情况下,我建议在三重引号中编写可读的html代码(即正确缩进)。在你的情况下,我会使用单个三重引号,所以你不必逃避每一个“。我只是在这里推荐单引号以避免混淆,但我相信”“”也适用于这种情况。

self.response.out.write('''<html>
  <body>
    <h6>Panda has %s hugs!</h6>
      <form action="/HugPanda" method="post">
        <div>
          <input type="text" name="PandaMessage" value=
          "A message for a panda.">
        </div>
        <div>
          <input type="submit" value="Hug a panda?">
        </div>
      </form>
  </body>
</html>''' % Adder)

刚刚注意到重写代码后html中的一些错误应该有'/&gt;'关闭输入标签。不使用任何工具,良好的风格可以在很大程度上避免错误!

http://www.python.org/dev/peps/pep-0008/

答案 1 :(得分:2)

行的结尾

self.response.out.write("<form....da?\"></div></form></body></html>">

应替换为。

self.response.out.write("<form....da?\"></div></form></body></html>")

括号不平衡。此外,虽然这在语法上不是错误的,但你需要在整个文件中统一重新考虑缩进到4个空格。

快乐编码。