2011-08-07 16 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 = open( "/ tmp/formdata.txt"、 "w"); fo.write(repr(formData)); fo.close() 'を呼び出して、実際に何が得られているかを確認してください。 – Keith

答えて

0

あなたのコードはguessの値は、フォームのデータ・ディクショナリにあることを期待、それは存在しないのです。

0

フォームには「推測」エントリがありませんが、「名前」エントリがあります。

0

ユーザ入力の辞書formDataには、"guess"というエントリはありません。提出したフォームに<input name="guess" value="3" />のようなフィールドがありますか?

+0

はい、私は確信しています。なぜこのことが起きているのかわからないのです。 –

1

あなたはPOSTではないようですが、それはguess値です。各エントリはキーを持ち、Pythonのdict辞書データ型で

<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

:あなたは前ページでは、このようなものを持っている必要があります。コードformData["guess"]は、辞書formDataのキー"guess"にアクセスして、基礎となる値を取得しようとしています。

KeyErrorがあるため、辞書には"guess"という名前のキーはありません。辞書にはあなたのcgi.FieldStorage()コールが設定されているので、これはあなたのcgiフォームオブジェクトに "guess"という名前のフィールドがないと解釈できます。

関連する問題