2014-10-02 2 views
1

G'day!KeyError in Python

Так что это мой код:

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 

И, когда я служу его в браузере, это ошибка:

Traceback (most recent call last): File "/home/nandres/dbsys/mywork/James/mywork/ViewerForm.py", >line 42, in ViewerType=form['ViewerType'].value File "/usr/lib/python2.7/cgi.py", line 541, in >getitem raise KeyError, key KeyError: 'ViewerType'

И линия 42 последняя строка моего кода.

Ошибка на самом деле не влияет на функциональность, и все работает нормально, но я действительно не хочу, чтобы она появлялась. Любые советы/понимание будут оценены с большой благодарностью.

Btw, у меня есть это в верхней части моего кода:

import cgi 
form = cgi.FieldStorage() 

Спасибо!

ответ

1

Когда ваш скрипт первый называется для отображения страницы, тем form ДИКТ пуст. Дикт будет заполняться только тогда, когда пользователь действительно отправит форму. Таким образом, изменив HTML для

<option value="C" selected>Crowd Funding 

не помощи.

Так что вам нужно протестировать диктофон, прежде чем пытаться получить к нему доступ. Например,

#! /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>" 
+0

Спасибо, я использовал ваш код для вдохновения и получил его работу. –

+0

Отлично! Спасибо за очки. PS. Я надеюсь, что ваша фактическая программа не служит HTML с отсутствующими закрывающими тегами и т. Д. :) –

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.