【问题标题】:AttributeError: 'unicode' object has no attribute 'pop'AttributeError:“unicode”对象没有属性“pop”
【发布时间】:2012-09-19 20:43:35
【问题描述】:

我在 gae 中有这段 python 代码。

def post(self):
    cases=self.request.get('cases')
    while cases:
        logging.info("cases: %s " % cases)
        case=cases.pop()

产生此日志。

INFO     2012-09-19 20:23:50,690 views.py:674] cases: [u'court1150'] 
ERROR    2012-09-19 20:23:50,690 webapp2.py:1553] 'unicode' object has no attribute 'pop'
Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/Users/brian/googleapps/scheduler/views.py", line 675, in post
    case=cases.pop()
AttributeError: 'unicode' object has no attribute 'pop'

另一方面,交互式控制台中的代码几乎相同。

cases = [u'court1150'] 
while cases:
    case=cases.pop()
    print case
print cases

我没有收到任何错误,并打印出以下内容。

court1150
[]

为什么我在 gae 启动器中收到 unicode 错误,我该如何解决?

【问题讨论】:

  • 嗯,显然它不一样,因为cases 是不同的类型。

标签: python google-app-engine unicode webapp2


【解决方案1】:

self.request.get('cases') 不返回值列表,它只返回 一个 值。尝试改用get_all('cases'):

def post(self):
    cases=self.request.get_all('cases')
    while cases:
        logging.info("cases: %s " % cases)
        case=cases.pop()

不需要使用while循环,for循环效果更好:

def post(self):
    cases=self.request.get_all('cases')
    logging.info("cases: %s " % cases)
    for case in cases:
        # do something with case.

【讨论】:

  • 尽管为什么 OP 想要 pop 完全让我无法理解。为什么不只是for case in cases: logging.info(...)?
  • 这个答案似乎不起作用。现在我得到一个不同的错误:ERROR 2012-09-19 21:05:30,810 webapp2.py:1553] getlist Traceback (most recent call last): AttributeError: getlist
  • 抱歉,针对 webapp2 进行了更正,其中方法称为 get_all。
猜你喜欢
  • 2016-01-05
  • 2017-05-19
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
相关资源
最近更新 更多