我想从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仍然是一个字符串。
如何将其转换为整数?
我尝试使用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中获取时间,那么它就无法显示当前的错误。尽管它确实退出了几个小时前发生的错误......
我找到了新的东西:只有当事情涉及“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'"
感谢任何帮助。
答案 0 :(得分:1)
我遇到了同样的问题,无法将表单中的值转换为数字。这是我改编自this blog post的另一个解决方案。我从名为q1,q2,q3等的单选按钮集返回了一些值,并使用这个字典进行转换。
WebElement templateFound = driver.findElement(By.linkText("Main"));
表单元素的值&#34; q1&#34;是数字的字符串形式,因此将其转换为数字形式。和你一样, 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") ]
只是没有工作。我仍然不知道为什么会这样。
答案 1 :(得分:0)
该元素的值似乎是form
,您传递给int
的是从http服务器返回的错误消息:
“%d格式:需要一个数字,而不是str”
为了论证,你可以尝试相同的事情,而不是将 id 字段限制为type =“number”,但是键入=“text”。我的猜测是,这将允许转换为整数。
如果您需要将结果强制为整数,请使用类似
while not id:
try:
id = int(form["id"].value)
except TypeError:
error_pop("id should be number")