-1

I have this piece of python code in gae.

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

Which produces this log.

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'

On the other hand with this almost identical code in the interactive console.

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

I get no error and the following print out.

court1150
[]

Why am I getting a unicode error in the gae launcher and how can I fix it?

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
zerowords
  • 2,915
  • 4
  • 29
  • 44

1 Answers1

3

self.request.get('cases') does not return a list of values, it returns just one value. Try using get_all('cases') instead:

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

There is no need to use a while loop, a for loop works much better:

def post(self):
    cases=self.request.get_all('cases')
    logging.info("cases: %s " % cases)
    for case in cases:
        # do something with case.
Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
  • Although why the OP would want the `pop` at all escapes me. Why not just `for case in cases: logging.info(...)`? – Daniel Roseman Sep 19 '12 at 20:54
  • This answer does not seem to work. Now I get a different error: `ERROR 2012-09-19 21:05:30,810 webapp2.py:1553] getlist Traceback (most recent call last): AttributeError: getlist` – zerowords Sep 19 '12 at 21:07
  • Sorry, corrected for webapp2 where the method is called `get_all`. – Martijn Pieters Sep 19 '12 at 21:13