0

いくつかのXMLからコンテンツを取得するためにforループを実行していますが、29回目の反復に到達するまでは正常に機能します。その時点で、次のエラーが発生します。

File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 572, in dispatch
  return self.handle_exception(e, self.app.debug)   
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 570, in dispatch
  return method(*args, **kwargs)   
File "J:\Art & Graphic Design\Graphic Design\Websites\lawvoter-dev\cron_congressman.py", line 64, in get
  birthday      = re.findall("<birthday>(.*)</birthday>",element)[0] 
IndexError: list index out of range

コードは次のとおりです。

for element in members:
            title         = re.findall("<title>(.*)</title>",element)[0]
            role          = re.findall("<role_type_label>(.*)</role_type_label>",element)[0]
            name_sortable = re.findall("<name_sortable>(.*)</name_sortable>",element)[0]
            firstname     = re.findall("<firstname>(.*)</firstname>",element)[0]
            lastname      = re.findall("<lastname>(.*)</lastname>",element)[0]
            gender        = re.findall("<gender_label>(.*)</gender_label>",element)[0]
            birthday      = re.findall("<birthday>(.*)</birthday>",element)[0]
            party         = re.findall("<party>(.*)</party>",element)[0]
            state         = re.findall("<state>(.*)</state>",element)[0]
            description   = re.findall("<description>(.*)</description>",element)[0]
            start_date    = re.findall("<startdate>(.*)</startdate>",element)[0]
            end_date      = re.findall("<enddate>(.*)</enddate>",element)[0]
            website       = re.findall("<website>(.*)</website>",element)[0]
            bioguideid    = re.findall("<bioguideid>(.*)</bioguideid>",element)[0]
            osid          = re.findall("<osid>(.*)</osid>",element)[0]
            pvsid         = re.findall("<pvsid>(.*)</pvsid>",element)[0]
            twitterid     = re.findall("<twitterid>(.*)</twitterid>",element)[0]
            youtubeid     = re.findall("<youtubeid>(.*)</youtubeid>",element)[0]

            member = Congressman(title=title, role=role, name_sortable=name_sortable, firstname=firstname, lastname=lastname, gender=gender, birthday=birthday, party=party, state=state,
                                 description=description, start_date=start_date, end_date=end_date, website=website, bioguideid=bioguideid, osid=osid, pvsid=pvsid, twitterid=twitterid, youtubeid=youtubeid)
            member.put()

このエラーがポップアップする理由が本当にわかりませんか?最初の29回の反復では常に正常に機能しますか?念のため、データモデルの各要素も「default=None」に設定されています。ただし、XML自体を見て、エラーが発生した正確な行に移動すると、値は実際にそこにあります。値が存在するのになぜエラーが発生するのか誰もが知っていますか?

4

1 に答える 1

1

のように見えます

birthday      = re.findall("<birthday>(.*)</birthday>",element)[0]

空のリストを返し、リストにない最初の要素を抽出しようとすると、

IndexError: list index out of range

ここみたいに:

>>> l = []
>>> l[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> 

編集:

import re, logging

def findelement(item, element):
    i = re.findall(item, element)
    if not i:
        logging.info('no item found for %s with element %s' %(item, element))
        return ''
    return i[0]


for element in members:
    title = findelement("<title>(.*)</title>", element)
    ...
于 2012-08-17T13:15:38.423 に答える