2

我想从 HTML 表单中获取整数值,我使用了以下 python 代码:

    form = cgi.FieldStorage()
    if not form.has_key("id"):
        error_pop("There is no id in this form","The format of the request is not correct")
    id = form["id"].value    (*)

在 HTML 文件中,我将输入类型设为number

id: <input type="number" name="id" /><br />

但是,我从 ( ) 行得到的 id 似乎*仍然是一个字符串。

如何将其转换为整数?

我试过 use int(form["id"].value),但python给了我以下错误:

<type 'exceptions.TypeError'>: %d 格式:需要一个数字,不是 str args = ('%d 格式:需要一个数字,不是 str',) message = '%d 格式:需要一个数字,不是 str'

所以,我放弃了使用int().

如果我在将其解析为 之前尝试打印该值int(),那么我将从浏览器收到内部服务器错误。实际上,如果我更改 python 文件中的某些内容,我总是会收到此错误。我可以从 error_log.log 中看到错误:

/usr/lib/python2.6/cgitb.py:173: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
value = pydoc.html.repr(getattr(evalue, name))

实际上,如果我从error.log grep 今天的时间,那么它就无法显示当前的错误......尽管它确实退出了几个小时前发生的一些错误......

我发现了一些新的东西:只有当事情涉及到“id”这个东西时,才会出现内部服务器错误。如果我做类似的事情id = form["idid"].value,那么它会给出错误:

<type 'exceptions.TypeError'>: int() argument must be a string or a number, not 'NoneType' 
      args = ("int() argument must be a string or a number, not 'NoneType'",) 
      message = "int() argument must be a string or a number, not 'NoneType'"

任何帮助表示赞赏。

4

2 回答 2

1

我遇到了同样的问题,无法将值从表单转换为数字。这是我改编自这篇博文的另一个解决方案。我有一些从名为 q1、q2、q3 等的单选按钮集返回的值,并使用此字典对其进行转换。

 str2num = {"1":1, "2":2, "3":3, "4":4, "5":5, "6":6}

 val1 = str2num[ form.getvalue("q1") ]
 val2 = str2num[ form.getvalue("q2") ]
 val3 = str2num[ form.getvalue("q3") ]

表单元素“q1”的值是数字的字符串形式,因此将其转换为数字形式。像你一样,int( form.getvalue("q1") )只是没有工作。我仍然不知道为什么会这样。

于 2015-11-23T04:01:26.280 回答
0

似乎元素的值是form,您传递给int的是从 http 服务器返回的错误消息:
“%d 格式:需要一个数字,而不是 str”
为了论证,您可以在不限制的情况下尝试相同的事情吗id字段为 type="number",但 type="text"。我的猜测是这将允许转换为整数。如果您需要强制结果为整数,请使用类似

while not id:
  try:
    id = int(form["id"].value)
  except TypeError:
    error_pop("id should be number")
于 2012-10-11T08:06:52.327 回答