Python - Понимание ошибки: IndexError: список индексов вне диапазона - PullRequest
1 голос
/ 01 апреля 2011

Я довольно новичок в питоне.У меня есть ошибка, которую мне нужно понять.

Код:

config.py:

# Vou definir os feeds
feeds_updates = [{"feedurl": "http://aaa1.com/rss/punch.rss", "linktoourpage": "http://www.ha.com/fun.htm"},
                 {"feedurl": "http://aaa2.com/rss.xml", "linktoourpage": "http://www.ha.com/fun.htm"},
                 {"feedurl": "http://aaa3.com/Heaven", "linktoourpage": "http://www.ha.com/fun.htm"},
                 {"feedurl": "http://aaa4.com/feed.php", "linktoourpage": "http://www.ha.com/fun.htm"},
                 {"feedurl": "http://aaa5.com/index.php?format=feed&type=rss", "linktoourpage": "http://www.ha.com/fun.htm"},
                 {"feedurl": "http://aaa6.com/rss.xml", "linktoourpage": "http://www.ha.com/fun.htm"},
                 {"feedurl": "http://aaa7.com/?format=xml", "linktoourpage": "http://www.ha.com/fun.htm"},
                 {"feedurl": "http://aaa8/site/component/rsssyndicator/?feed_id=1", "linktoourpage": "http://www.ha.com/fun.htm"}]

twitterC.py

# -*- coding: utf-8 -*-
import config   # Ficheiro de configuracao
import twitter
import random
import sqlite3
import time
import bitly_api #https://github.com/bitly/bitly-api-python
import feedparser

...

# Vou escolher um feed ao acaso
feed_a_enviar = random.choice(config.feeds_updates)
# Vou apanhar o conteudo do feed
d = feedparser.parse(feed_a_enviar["feedurl"])
# Vou definir quantos feeds quero ter no i
i = range(8)
print i
# Vou meter para "updates" 10 entradas do feed
updates = []
for i in range(8):
    updates.append([{"url": feed_a_enviar["linktoourpage"], "msg": d.entries[i].title + ", "}])
# Vou escolher ums entrada ao acaso
print updates # p debug so
update_to_send = random.choice(updates)

print update_to_send # Para efeitos de debug

И ошибка, которая иногда появляется из-за природы случайного:

Traceback (most recent call last):
  File "C:\Users\anlopes\workspace\redes_sociais\src\twitterC.py", line 77, in <module>
    updates.append([{"url": feed_a_enviar["linktoourpage"], "msg": d.entries[i].title + ", "}])
IndexError: list index out of range

Я не дохожу до ошибки, список «feeds_updates» представляет собой список из 8 элементов, я думаю, хорошо объявлен иСЛУЧАЙНЫЙ выберет один из 8 ...

Может кто-нибудь подсказать мне, что здесь происходит?

PS: Извините за мой плохой английский.

С наилучшими пожеланиями,

Ответы [ 2 ]

5 голосов
/ 01 апреля 2011

Использование range для итерации почти всегда не лучший способ. В Python вы можете выполнять итерацию непосредственно над списком, диктом, набором и т. Д.

for item in d.entries:
    updates.append([{"url": feed_a_enviar["linktoourpage"], "msg": item.title + ", "}])

Очевидно, d.entries[i] вызывает ошибку, поскольку этот список содержит менее 8 элементов (feeds_updates может содержать 8, но вы не выполняете итерацию по этому списку).

2 голосов
/ 01 апреля 2011

d.entries имеет менее 8 элементов. Выполните итерацию по d.entries напрямую вместо некоторого отключенного диапазона.

...