2011-08-07 51 views
0

它繼續顯示此錯誤這個錯誤在Python和XHTML中意味着什麼?

Traceback (most recent call last): 
    File "/home/zca22/public_html/Lab_Assn_5/Scripts/dice.py", line 7, in <module> 
    playerGuess = int(formData["guess"].value) 
    File "/usr/lib/python2.6/cgi.py", line 541, in __getitem__ 
    raise KeyError, key 
KeyError: 'guess' 

我不知道什麼是錯IIN我的代碼。

import cgi 
import random 

formData = cgi.FieldStorage() 
playerName = formData["name"].value 
playerGuess = int(formData["guess"].value) 
theLength = 5 
sum = 0 

print "Content-type: text/html" 

print "<p>Thanks for playing, " + playerName + ",</p>" 

for die in range(theLength): 
    val = random.randint(1,6) 
    print '<img src = "Images/dice-%i.gif" alt="%i" width="107" height="107" />' % (val, val) 
    sum = sum + val 

print "<p>You bet the total would be at least " + playerGuess + ". The total rolled was " + sum + ".</p>" 

if playerGuess >= sum: 
    print "<p>You won!</p>" 
else: 
    print """<p>Sorry, you lose!</p> 
     </body> 
     </html>""" 
+0

我已將此代碼添加到XHTML表單中:您打賭的總數至少爲:

+0

放行'fo =打開(「/ tmp/formdata.txt」,「w」); fo.write(再版(FORMDATA));在代碼中使用fo.close()'來查看你實際獲得的內容。 – Keith

回答

0

您的代碼需要guess的值爲表單數據字典中的值,但它不存在。

0

這意味着表單沒有「猜測」條目,但它確實有「名稱」條目。

0

formData中沒有"guess"條目,即用戶輸入字典。你確定你有一個類似於<input name="guess" value="3" />的字段嗎?

+0

是的,我敢肯定,這就是爲什麼我不確定發生這種情況 –

1

看起來你不是POST它的值爲guess值。你應該有前像這樣的頁面:

<form action="/cgi-bin/guess.py" method="post"> 
    <dl> 
     <dt><label for="name_field">Name:</label></dt> 
     <dd><input type="text" id="name_field" name="name" required="required" /></dd> 
     <dt><label for="guess_field">Guess:</label></dt> 
     <dd><input type="number" id="guess_field" name="guess" min="1" max="6" step="1" required="required" /></dd> 
    </dl> 
    <p><input type="submit" value="Guess" /></p> 
</form> 
+0

+1,因爲你回溯了它 –

0

在Python dict字典數據類型,每個條目有。您的代碼formData["guess"]嘗試訪問關鍵字"guess"下的字典formData以檢索基礎值。

由於您收到KeyError,因此您的字典中沒有任何鍵名爲"guess"。由於字典是由您的cgi.FieldStorage()調用填充的,因此可以解釋爲您的cgi表單對象沒有名稱爲「guess」的字段。