Tutorial :TypeError: ListControl, must set a sequence (python error)



Question:

I am using Python Mechanize to open a website, fill out a form, and submit that form. It's actually pretty simple. It works until I come across radio buttons and "select" input boxes.

br.open(url)  br.select_form(name="postmsg")  br.form['subject'] = "Is this good for the holidays? "  br.form['message'] = "I'm new to technology."  br.form['E'] = '0'  br.submit()      br.form['E'] = '0'    File "build/bdist.linux-x86_64/egg/ClientForm.py", line 2897, in __setitem__    File "build/bdist.linux-x86_64/egg/ClientForm.py", line 2092, in __setattr__    File "build/bdist.linux-x86_64/egg/ClientForm.py", line 2100, in _set_value  TypeError: ListControl, must set a sequence  

Why am I getting this error? Why can't I set E just like the text boxes? (E is a radio button)

Edit: This is the form, according to Web Developer.

Elements  Index   Id  Name    Type    Value   Label   Size    Maximum Length  State  0   subject subject text            35        2   message message textarea                      3   identity    identity    select          1         13      action_btn  hidden                    14      _charset_   hidden                    16      r   hidden  /Stocks_(A_to_Z)/Stocks_G                 9       E   radio   0                   Checked  8       E   radio   1                 15      .crumb  hidden  1n1Yo3MQae3               7       E   radio   2                 17      bn  hidden  25263                 6       E   radio   3                 5       E   radio   4                 4       E   radio   5                 12  SubmitCancel    SubmitCancel    submit  Cancel                1   mbpostthreads   threads button  Check Existing Topics First               11  SubmitPost  SubmitPost  submit  Post Message                  10  SubmitPreview   SubmitPreview   submit  Preview Message               18  yIdCoreIdUser       hidden  annamae41g    


Solution:1

Radio buttons and Check-boxes can have different behavior then other elements. It depends on their name and id.

If the items have the same name, try doing this:

br.find_control(name="E").value = ["0"]  

Another option is:

form.find_control(name="E", kind="list").value = ["0"]  

and finally, this might work:

    br["E"] = ["0"]  

(I haven't used mechanize in a while so i don't remember exactly).


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »