Что означает эта ошибка в Python и XHTML? - PullRequest
0 голосов
/ 07 августа 2011

Он продолжает показывать эту ошибку

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'

Я не знаю, что не так в моем коде.

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>"""

Ответы [ 5 ]

1 голос
/ 07 августа 2011

Похоже, вы не 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 голосов
/ 07 августа 2011

В типе данных словаря Python dict каждая запись имеет значение key и значение .Ваш код formData["guess"] пытается получить доступ к словарю formData под ключом "guess", чтобы получить базовое значение.

Поскольку вы получаете KeyError, в вашем словаре нет ключа с именем "guess",Так как словарь заполняется вашим вызовом cgi.FieldStorage(), это можно интерпретировать как выражение, что у вашего объекта формы cgi нет поля с именем «угадать».

0 голосов
/ 07 августа 2011

Это означает, что в форме нет записи «угадай», но в ней есть запись «имя».

0 голосов
/ 07 августа 2011

В formData, словаре пользовательских вводов, нет записи "guess".Вы уверены, что у вас есть поле типа <input name="guess" value="3" /> в той форме, которую вы отправляете?

0 голосов
/ 07 августа 2011

Ваш код ожидает, что значение guess будет в словаре данных формы, но его нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...