【问题标题】:GAE ValueError with GET parameters带有 GET 参数的 GAE ValueError
【发布时间】:2012-03-05 10:08:23
【问题描述】:

我正在尝试创建一个简单的应用程序来返回给定来自 GET 参数的两个输入的余数。这些输入将从 url 查询中获取。

例如http://thisisanexample.appspot.com/?a=1&b=2 这应该得到答案 1,因为 2/1 的余数 = 1。

    a = self.request.get('a')
    b = self.request.get('b')
    c = 0
    if (int(a)>int(b)):
        c=int(a)%int(b)
    else:
        c=int(b)%int(a)
    self.response.out.write(type(a))

但是,我遇到了以下 ValueError 问题:ValueError: invalid literal for int() with base 10: ''

我假设问题在于变量以前未知,并且可能以或未指定的方式开始,因此保持为 '',从而产生错误。任何帮助将不胜感激!

【问题讨论】:

  • self.response.out.write(type(a)) 告诉你什么?
  • 不确定你的数学。 2 mod 1 为 0,因为 2/1=2 而不是 1。
  • 嗯,出于某种原因,它没有给我任何东西。如果我给出一个像 self.response.out.write(a) 这样的超级简单命令,它会响应,它给了我 a 的值......你是对的 - 将它编辑到上面但仍然是同样的错误

标签: python google-app-engine get


【解决方案1】:

GET参数存储在request.GET中,而不是请求本身,所以你想把你的代码改成

a = request.GET.get('a')
b = request.GET.get('b')

顺便说一句,你在哪里写的代码? self.request 是什么?如果您正在编写视图,则应该是:

def my_view(request, *args, **kwargs ):
    # access request here

request.get 没有在 Django HttpRequest 对象上定义...

:编辑:

GAE 并不完全是 Django。引用GAE's documentation

get()默认返回空字符串('')

所以您的代码是正确的,但您应该检查空字符串,而不是检查 ab 是否为 None

【讨论】:

  • 谢谢!我正在使用 coderbuddy 和 GAE。使用以下定义自我。 from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app import os from google.appengine.ext.webapp import template class MainPage(webapp.RequestHandler): def get(self):
  • GAE 不是 django,您应该更改标签并在问题标题中指定 GAE... 查看更新后的答案
  • 实际上,使用基于类的视图self.request 是有意义的。见这里:docs.djangoproject.com/en/dev/topics/class-based-views(但我会留给你,这不是问题所在)。
  • 同意,但get 上仍然没有定义 :-) of curse 这在 Django 中是正确的,而在 GAE 中它的工作方式不同,肖恩的代码运行良好
【解决方案2】:

您必须使用 GET dict 进行查询,因为您使用的 get 方法是 QueryDict 类的成员。此外,在这种情况下,使用 get 方法提供的默认参数可能会很有用:

try:
    a = int(self.request.GET.get('a', 0))
    b = int(self.request.GET.get('b', 1))
except TypeError:
    # Could not cast to int
# Do what you want

【讨论】:

  • 啊,这很有帮助!抱歉,看起来很笨,但是 0 和 1 是预定义的值吗?
  • 是的,01 是值 ab 如果在 GET 字典中找不到它们,则默认为。
【解决方案3】:

如果你使用get_range(见http://code.google.com/intl/en/appengine/docs/python/tools/webapp/requestclass.html#Request_get_range),你可以省略手动转换为int:

self.request.GET.get_range('a')

【讨论】:

    猜你喜欢
    • 2014-03-04
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2011-06-08
    • 2017-04-02
    • 2023-03-31
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多