这是我的代码:
print """\
<form method="post">
Please enter Viewer Type:<br />
<table>
"""
#Viewer Type
print "<tr><td>Viewer Type<select name=""ViewerType"">"
print """\
<option value="C">Crowd Funding
<option value="P">Premium
"""
#do it button
print """\
<input type="submit" value="OK" />
"""
print """\
</form>
</body>
<html>
"""
ViewerType=form['ViewerType'].value
而且,当我将它提供给浏览器时,这就是错误:
回溯(最近一次调用最后一次):文件“/home/nandres/dbsys/mywork/James/mywork/ViewerForm.py”,&gt;第42行,在ViewerType = form ['ViewerType']。值文件“/ usr / lib / python2.7 / cgi.py“,第541行,&gt; getitem 引发KeyError,键KeyError:'ViewerType'
第42行是我代码的最后一行。
错误实际上并没有影响功能,一切正常,但我真的不想让它弹出来。任何建议/见解将不胜感激。
顺便说一下,我的代码顶部有这个:
import cgi
form = cgi.FieldStorage()
答案 0 :(得分:1)
首次调用脚本渲染页面时,form
dict为空。 dict只有在用户实际提交表单时才会被填充。所以将HTML更改为
<option value="C" selected>Crowd Funding
赢了帮助。
因此,您需要在尝试访问它之前测试dict。例如,
#! /usr/bin/env python
import cgi
form = cgi.FieldStorage()
print 'Content-type: text/html\n\n'
print "<html><body>"
print """\
<form method="post">
Please enter Viewer Type:<br />
<table>
"""
#Viewer Type
print "<tr><td>Viewer Type<select name=""ViewerType"">"
print """\
<option value="C">Crowd Funding
<option value="P">Premium
"""
#do it button
print """\
<input type="submit" value="OK" />
"""
print "</table></form>"
if len(form) > 0:
ViewerType = form['ViewerType'].value
print '<p>Viewer Type=' + ViewerType + '</p>'
else:
print '<p>No Viewer Type selected yet</p>'
print "</body></html>"
答案 1 :(得分:0)
简单的解决方案,如果你不想让它弹出:
try:
ViewerType=form['ViewerType'].value
except KeyError:
pass
它会工作,但我建议你调试你的代码并找出你获得KeyError的原因。来自https://wiki.python.org/moin/KeyError,
Python raises a KeyError whenever a dict() object is requested (using the format a = adict[key]) and the key is not in the dictionary.