[Python 2.7] Boto - IndexError: string index out of range

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Hercul3s
  • Registratie: Juni 2001
  • Laatst online: 16:24
Oke, ik wil met Python (en Boto, de uitbreiding voor Amazon Webservices (AWS)) iets programmeren voor Mechanical Turk. Het is mijn eerste keer Python, ik ben een heel eind gekomen alleen strand ik nu toch.

Het probleem is het volgende:

Ik wil een vragenlijst maken met meerdere radiobuttons in mTurk. Als ik 1 radiobutton programmeer gaat alles goed, zodra ik er een 2e inzet krijg ik een error en ik begrijp net waar dit vandaan komt.

Mijn code:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from boto.mturk.connection import MTurkConnection
from boto.mturk.question import QuestionContent,Question,QuestionForm,Overview,AnswerSpecification,SelectionAnswer,FormattedContent,FreeTextAnswer

ACCESS_ID = 'MIJNACCESID'
SECRET_KEY = 'MIJNSECRETKEY'
HOST = 'mechanicalturk.sandbox.amazonaws.com'
 
mtc = MTurkConnection(aws_access_key_id=ACCESS_ID,
                      aws_secret_access_key=SECRET_KEY,
                      host=HOST)

overview = Overview()
overview.append_field('Title', 'Please fill out the following questionnaire.')

qf = QuestionForm()
qf.append(overview)

gender =[('Male','0'),
         ('Female','1'),]

race =[('Afro American','0'),
        ('White American'),'1']

qcontent = QuestionContent()
qcontent.append_field('Title', 'What is your gender?')
form = SelectionAnswer(min=1, max=1, style='radiobutton', selections=gender, type='text', other=False)
q1 = Question(identifier='genderquestion1', content=qcontent, answer_spec=AnswerSpecification(form), is_required=True)
qf.append(q1)

qcontent = QuestionContent()
qcontent.append_field('Title', 'What is your name?')
form = SelectionAnswer(min=1, max=1, style='dropdown', selections=race, type='text', other=False)
q2 = Question(identifier='namequestion1', content=qcontent, answer_spec=AnswerSpecification(form), is_required=False)
qf.append(q2)

mtc.create_hit(question=qf, 
                max_assignments=1, 
                title='Demographical info', 
                description='Fill out your demographical information to acquire the qualification', 
                keywords='qualification, psych', 
                reward=0.05)


BOTO Code waar de foutmelding gebeurd

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def get_as_xml(self):
        if self.type == 'text':
            TYPE_TAG = "Text"
        elif self.type == 'binary':
            TYPE_TAG = "Binary"
        else:
            raise ValueError("illegal type: %s; must be either 'text' or 'binary'" % str(self.type))
        
        # build list of <Selection> elements
        selections_xml = ""
        for tpl in self.selections:
            value_xml = SelectionAnswer.SELECTION_VALUE_XML_TEMPLATE % (TYPE_TAG, tpl[0], TYPE_TAG)
            selection_xml = SelectionAnswer.SELECTION_XML_TEMPLATE % (tpl[1], value_xml)
            selections_xml += selection_xml


Foutmelding

code:
1
2
3
File "C:\Python27\lib\site-packages\boto-2.2.2-py2.7.egg\boto\mturk\question.py", line 376, in get_as_xml
    selection_xml = SelectionAnswer.SELECTION_XML_TEMPLATE % (tpl[1], value_xml)
IndexError: string index out of range

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 09:10
Is tpl[1] wel gevuld op regel 13 (of 376 in je traceback) van je Boto code? Want je krijgt een error op een index out of range, wat meestal inhoudt dat je buiten de boundries van je array gaat. Als tpl[1] gelijk is aan null zou dat denk ik weleens kunnen.

Misschien handig om die array eens te printen in plaats van te foreachen zoals je nu doet.

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Uit je eigen code:
code:
1
2
race =[('Afro American','0'),
        ('White American'),'1']


Kijk daar nog eens goed naar. Verder is dit natuurlijk debugging 101: kijk wat tpl is, kijk waarom self.selections zo is als 'ie is, etc.

[ Voor 29% gewijzigd door ValHallASW op 09-03-2012 10:46 ]


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 09:10
@ValHallASW, dan klopt mijn redenatie toch, alleen had ik jouw gequote stukje nog niet gezien :).

Acties:
  • 0 Henk 'm!

  • Hercul3s
  • Registratie: Juni 2001
  • Laatst online: 16:24
ValHallASW schreef op vrijdag 09 maart 2012 @ 10:45:
Uit je eigen code:
code:
1
2
race =[('Afro American','0'),
        ('White American'),'1']


Kijk daar nog eens goed naar. Verder is dit natuurlijk debugging 101: kijk wat tpl is, kijk waarom self.selections zo is als 'ie is, etc.
.. ik denk dat ik lag te slapen toen ik de code een paar keer doornam :z . Alweer een tijdje geleden dat ik echt met code bezig ben geweest .. Heb de ) verplaatst en alles werkt weer. Heel erg bedankt voor de snelle hulp!