Udacity CS253使用GAE,处理程序错误

时间:2013-12-10 15:49:32

标签: python google-app-engine python-2.7 python-imaging-library httphandler

我遇到了障碍。事实上,另一名学生Ahmad在同一时间遇到了类似的障碍。到目前为止,我们还没有得到Udacity论坛的回答,所以我想我会在这里交叉发帖,希望尽快得到帮助。问题出现在这里:Web Development - Lesson 2 - More Handlers。 (如果您未登录,该链接可能无效。)

到目前为止,我们俩都做得很好并取得了进展,但是从现在开始,事情就会停止,我们都被困住了。这是我回到艾哈迈德的最后一篇文章:

我在MS Word中将你的日志与我的比较。当您摆脱时间,字体和文件路径等问题时,会有一些差异。我们都得到了:

  

警告api_server.py:331]无法初始化图像API;你很可能错过了Python“PIL”模块。

  

错误wsgi.py:262]

我们的追溯几乎相同

  

追踪(最近一次通话):     文件“C:\ Program Files \(x86)\ Google \ google_appengine \ google \ appengine \ runtime \ wsgi.py”,第239行,处理中       handler = _config_handle.add_wsgi_middleware(self._LoadHandler())     _LoadHandler中的文件“C:\ Program Files \(x86)\ Google \ google_appengine \ google \ appengine \ runtime \ wsgi.py”,第298行       handler,path,err = LoadObject(self._handler)     在LoadObject中的文件“C:\ Program Files \(x86)\ Google \ google_appengine \ google \ appengine \ runtime \ wsgi.py”,第84行       obj = 导入(路径[0])

但我们有不同的表单操作 (/<form action ="/testform, TestHandler)],">

我有一件事你没有

  

警告2013-12-09 18:18:41,795 simple_search_stub.py:1018]无法从c:\ users \ appdata \ local \ temp \ appengine.udacity7676 \ search_indexes

读取搜索索引

那么我们从哪里开始呢?我不知道,但我确实有很多问题,我希望有人可以并且会回答:

  1. 如果这个PIL模块如此重要,为什么要单独下载?那为什么GAE之前没告诉我们呢?
  2. 为什么我们都在Udacity测验中取得成功直到这一点?换句话说,这次演习有什么不同,突然让PIL变得至关重要?
  3. 我在应用引擎网站上查看了PIL。 https://developers.google.com/appengine/docs/python/images/它是一个图像操纵器,他们给出的例子是gae图标。这让我想知道我们在这一课上的进展是否因为某人需要将图标作为结果的一部分而遭遇海难?尽可能地说,在这个练习中没有图像,我不知道任何一个应用程序,缺少一个图标使整个事情崩溃。如果这是正在发生的事情,那就是疯狂和浪费。
  4. 我去了PIL下载站点。事实证明安装程序不仅希望在默认位置[c:\ python27]找到Python,也没有办法给它另一条路径。我试了很多次。由于我的python不在默认位置,要么我运气不好,要么我必须在那里重新安装,然后重新开始。这些工程师在与像我们这样的新手一起工作时有多么好和周到。
  5. 我注意到你说你事实上已经安装了PIL这一事实,但无论如何你得到了这个错误信息。那我们该怎么做呢?
  6. 我还将课程中的代码与本练习的代码进行了比较。
  7. 我有MainHandler,他们有MainPage,我注意到了 以前,但我认为这不重要。我的来了 用这个名字,我没有创造它。
  8. 三重引号似乎间隔不同,但我很确定我在其他地方听说间距无关紧要,所以这应该不是问题。
  9. 我没有内容类型的行,导师评论了他的意思。
  10. 他添加了out,与self.response.out.write(form)一样。这不在我的默认文件中。我只有self.response.write(form)

2 个答案:

答案 0 :(得分:2)

(/<form action ="/testform, TestHandler)],">看起来不正确。
它应该只是<form action="/testform">

PIL库对于GAE来说根本不是必需的(至少在你的情况下)。因此,它只是一个警告,您可以忽略它。 (它与你的错误无关)

如果您在最后MainHandler声明中使用了正确的处理程序MainPage,则class替换为app完全没有问题。像,

app = webapp2.WSGIApplication([('/', MainPage),
                               ('/testform', TestHandler)],
                              debug=True)

此外,间距并不重要,但中放置三引号字符串很重要。 e.g。

form = 
"""
<form action="/testform">
    <input name="q"> <input type="submit">
</form>
"""

会给出错误,但是,

form =       """
<form action="/testform">
    <input name="q"> <input type="submit">
</form>
"""

这样可以正常工作。

至于你们两个面临的实际问题,如果我无法查看代码,我无法帮助你。如果你想在Udacity论坛上继续讨论,那对我来说很好,但是,发布一个链接&amp;我会看到我能做些什么。

更新 - 您似乎错过了添加逗号来分隔URL-Handlers声明中的元组。您的代码看起来像

app = webapp2.WSGIApplication([('/', MainPage)
                               ('/testform', TestHandler)]
                              debug=True)

虽然它应该是

app = webapp2.WSGIApplication([('/', MainPage), # <-- comma at the end of line
                               ('/testform', TestHandler)], # <-- comma before hash
                              debug=True)

答案 1 :(得分:0)

INFO     2013-12-15 21:18:40,151 module.py:617] default: "GET / 

HTTP/1.1" 500 -
INFO     2013-12-15 21:18:40,190 module.py:617] default: "GET 

/favicon.ico HTTP/1.1" 304 -
ERROR    2013-12-16 03:18:48,500 wsgi.py:262] 

Traceback (most recent call last):

  File "C:\...\appengine\runtime\wsgi.py", line 239, in Handle

    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())

  File "C:\...\appengine\runtime\wsgi.py", line 298, in _LoadHandler

    handler, path, err = LoadObject(self._handler)

  File "C:\...\appengine\runtime\wsgi.py", line 84, in LoadObject

    obj = __import__(path[0])

  File "C:\...\udacity7676\main.py", line 18, in <module>

    ('/testform', TestHandler)],

TypeError: 'tuple' object is not callable

INFO     2013-12-15 21:18:48,512 module.py:617] default: "GET / 

HTTP/1.1" 500 -

我猜测处理程序名称没有对齐,这就是问题所在,但我宁愿在盲目前进之前得到您的反馈。我也猜测元组因同样的原因而无法调用。但我不记得任何修改wsgi.py的说明。我还猜想,favicon错误会发生在 PIL 问题上。