ValueError:无效的文字,无法用基数10转换为int,尝试从Google App引擎获取查询参数

3 投票
4 回答
27825 浏览
提问于 2025-04-15 13:26

我在使用Google App Engine从一个单独的条目获取数据时遇到了以下错误,比如说访问foobar.com/page/1时应该显示id为1的所有数据:

ValueError: invalid literal for int() with base 10

以下是相关文件:

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),

错误信息:

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 个回答

0

我在我的代码中遇到了类似的错误。我只是做了一个简单的处理,先把它转换成小数,然后再转换成整数,代码是 int(Decimal(str(self.request.get("id"))))

2

self.request.get("id") 改成简单的 id,因为这个 id 已经在你的 get 处理函数里传递过来了。

你现在的代码只适用于像 /browse/1/?id=1 这样的链接。

1

我不太明白你想要实现什么。第一行:

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

是从查询字符串中获取一个ID,然后返回一个页面对象。为了让它和传入的参数一起工作,你可以把它改成:

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

第二行有点奇怪:

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

这行代码并不是返回一个查询,而是返回一个页面对象。如果你把'id'换成'int(id)',它的效果和第一行完全一样。你到底想要实现什么呢?

撰写回答