我正在完成一项任务,我们将创建一个HTML订单表单,然后通过python执行信息以创建第二个客户收据。
这是错误消息:
Traceback (most recent call last):
File "F:\Assignment 3\page.py", line 17, in <module>
print "<p>Customer Name:", form["custName"].value, "</p>"
File "C:\Python27\lib\cgi.py", line 540, in __getitem__
raise KeyError, key
KeyError: 'custName'
HTML:
<form action="page.py">
<div class="personalinfohead">
<p>Personal Information:</p>
</div>
<div class="personalinfo">
<div>Full name:
<input type="text" name="custName" size="20" />
</div>
<div>Email address:
<input type="text" name="custEmail" size="50" />
</div>
<div>Street address:
<input type="text" name="custAdd" size="50" />
</div>
<div>City:
<input type="text" name="custCity" size="15" />
</div>
<div>Province:
<input type="text" name="custProv" size="2" maxlength="2" />
</div>
<div>Postal code:
<input type="text" name="custPostal" size="6" maxlength="6" />
</div>
</div>
PYTHON:
import cgi
form = cgi.FieldStorage()
# print HTTP/HTML header stuff
print """Content-type: text/html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html><head>
<title>Order Form</title>
</head><body>
"""
# print HTML body using form data
print "<h1>Kintoro Japanese Bar & Restaurant</h1>"
print "<h2>Customer Reciept</h2>"
print "<p>Customer Name:", form["custName"].value, "</p>"
print "<p>Customer Email Address:", form["custEmail"].value, "</p>"
print "<h2>Customer Address:</h2>"
print "<p>Street:", form["custAdd"].value, "</p>"
print "<p>City:", form["custCity"].value, "</p>"
print "<p>Province:", form["custProv"].value, "</p>"
print "<p>Postal Code:", form["custPostal"].value, "</p>"
答案 0 :(得分:0)
杰克是正确的,但是对于未来的学生来说,有一个背景故事和快速/肮脏的测试方法。
首先说明:
最初,您的KeyError表示该名称没有键。在您隐式声明了一个键(dict的第一部分)之后,它就错过了所述键的 Value 。
字典是键值对,因此两者都需要在脚本开头隐式声明(在前面和后面的调试中使用easy方法)。
减慢行动有助于更清楚地理解;
由于这个脚本是一个完全加载的CGI,通过为每个键值对声明变量来告诉它开始和结束,你看到了最终的结果 - 其中python将文本数据提供给CGI,然后CGI接受并解释说文本,并给出一些回复python的响应(有效与否!),python只能给你结果的结果。因此,这个错误看起来不同于您的标准(并且我可以添加优秀)非cgi / console错误以及可跟踪的回溯。
快速/肮脏的测试方法:
在告诉CGI将其传递回python使用之前隐式声明一个确切的键值对:
custName = { 'Name': 'John Smith' }
需要为每个提到的dict声明一个默认设置作为值,以便可以使用完全可操作的加载脚本,但这里的提示是custName不再出现错误,但它会抱怨你的下一个缺少键值对。
是的,很长的答案和过去的课堂时间 - 我知道。但是,希望这有助于理解“单一”问题的几个部分,而不是只为少数人解决一次。