CGI & Python (error)

Richard van de Stadt stadt at cs.utwente.nl
Sat Mar 3 20:54:46 EST 2001


Colin Meeks wrote:
> 
> > When accessing  the  script I get the error:
> >
> > File "getdate2.py", line 12, in ?
> >     day=form["day"].value
> >   File "/usr/lib/python1.5/cgi.py", line 907, in __getitem__
> >     raise KeyError, key
> > KeyError: day
> >
> > The script works from the command line.
> >
> > My problems is:  the script I am trying to run is based on another one.
> > This other script works. I can't  figure out the what is causing the
> problem
> > as the 2 scripts are identical  in every aspect execpt for 1 variable.
> Both
> > scripts are run in a page which has all the required parameters passed to
> it.
> > Help. Please...
> If this is what I think it is (sorry it's not immediately clear), but when I
> try
> to parse anything from CGI, if nothing is entered in one of the boxes, this
> seems to be especially for radio buttons, then the variable isn't
> initialised.
> 
> The thing I always do is something like
> 
> try:
>     day=form["day"].value
> except:
>     day=1 #or what ever you want the day variable initialised as
> 
> I hope this is of some help.

You can also use this:

if form.has_key("day") and form["day"].value) <> "":
	has_day_action(form["day"].value)
else:
	doesnot_have_day_action()

Note that neither of these options work in case the webform field
is a checkbox list. In such cases you shouldn't use ".value" directly,
but initially only the field name, like this:

if aForm.has_key("checkbox_list") and aForm["checkbox_list"] <> "":
	has_checkbox_list_action ()

To get the values of the selected items of a checkbox list (after you
tested if the fields exist like state above), do this:

checkbox_items =  aForm["checkbox_list"]
if type(checkbox_items) <> type ([]):
	checkbox_items = [checkbox_items]

After this, you will have the item(s) of the checkbox list in an array.
To get the values of the items, walk through the array, and *then* use
".value", e.g.:

checkbox_item_values = []
for item in checkbox_items:
	checkbox_item_values.append(item.value)

Cheers,

Richard.



More information about the Python-list mailing list