Python中的KeyError

时间:2014-10-02 06:50:33

标签: python html cgi traceback keyerror

这是我的代码:

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

2 个答案:

答案 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.