3
votes

I received the following error when trying to retrieve data using Google App Engine from a single entry to a single page e.g. foobar.com/page/1 would show all the data from id 1:

ValueError: invalid literal for int() with base 10

Here are the files:

Views.py

class One(webapp.RequestHandler):    
    def get(self, id):
        id         = models.Page.get_by_id(int(str(self.request.get("id")))) 
        page_query = models.Page.get(db.Key.from_path('Page', id))
        pages      = page_query

        template_values = {
            'pages': pages,
        }

        path = os.path.join(os.path.dirname(__file__), 'template/list.html')
        self.response.out.write(template.render(path, template_values))

Urls.py:

(r'/browse/(\d+)/', One),

Error:

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 501, in __call__
    handler.get(*groups)
  File "/Volumes/foobar/views.py", line 72, in get
    id = models.Page.get_by_id(int(str(self.request.get("id"))))
ValueError: invalid literal for int() with base 10: ''
4

4 Answers

1
votes

I'm not quite sure what you're trying to achieve here. The first line:

    id         = models.Page.get_by_id(int(str(self.request.get("id")))) 

returns a Page object with an ID fetched from the query string. To make it work with the passed in argument, change it to:

    id         = models.Page.get_by_id(int(id)) 

Odder is the second line:

    page_query = models.Page.get(db.Key.from_path('Page', id))

This does not return a query - it returns a page object, and if you replace 'id' with 'int(id)' does precisely the same thing as the first line. What are you trying to achieve here?

2
votes

Change self.request.get("id") to simply id, which is already being passed to your get handler.

The code, as you have it, would only work for URLs like /browse/1/?id=1

0
votes

I had a similar error in one of my code. I just did a simple hack of converting it into decimal first and later converting it into int int(Decimal(str(self.request.get("id"))))

0
votes

The error (as I'm sure that you know - or should know as it seems you have come very far in programming) means that you are typing/reading an invalid literal (invalid character) for something that should have base 10 value (i.e. 0-9 numbers).