在python中的类之间传递变量,(AttributeError:'NoneType'对象没有属性'write')

时间:2014-01-07 07:55:07

标签: google-app-engine python-2.7

下面是我的代码片段,我尝试将一个实例变量从类DiscussPage传递给另一个类quesAnsweredPage

class DiscussPage(webapp2.RequestHandler):
   def post(self):
                self.Ques_tit = "Content"
                classname = questAnsweredPage()
                classname.setValue(self.Ques_tit,self.Ques_tit)

class questAnsweredPage(webapp2.RequestHandler):
    Can_I = "yes"
    def setValue(self,que,title):
        self.response.write(que)

上面的代码返回错误:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "B:\Eclipse World\Google App Engine\App Engine Dev\Jambite_Extended\JambitesCurrent\Jambitesupdated by bel\main.py", line 2686, in post
    classname.setValue(self.Ques_tit,self.Ques_tit)
  File "B:\Eclipse World\Google App Engine\App Engine Dev\Jambite_Extended\JambitesCurrent\Jambitesupdated by bel\main.py", line 2774, in setValue
    self.response.write(que)
AttributeError: 'NoneType' object has no attribute 'write'

如何解决此错误

2 个答案:

答案 0 :(得分:1)

您需要查看基于webapp2.RequestHandler的类的签名(特别是init方法)

从文档http://webapp-improved.appspot.com/api/webapp2.html#webapp2.RequestHandler我们得到

 class webapp2.RequestHandler(request=None, response=None)[source]

因此,当您实例化从RequestHandler继承的类的实例时,您需要正确初始化它。

你的代码应该是

 classname = questAnsweredPage(self.request,self.response)

现在为什么要使用变量名classname来保存类的实例是一个完全独立的样式问题; - )

答案 1 :(得分:-1)

错误可能是因为self.response只能在get()post()方法中调用。