列表索引在heroku / phython中超出范围 - 尝试遵循代码指南

时间:2016-08-30 17:52:58

标签: python heroku

我试图遵循本指南:https://medium.com/@sarahnadia/how-to-code-a-simple-twitter-bot-for-complete-beginners-36e37231e67d#.k2cljjf0m

这是错误消息:

MacBook-Pro-2:heroku_ebooks-master Rupert$ heroku run worker
Running worker on ⬢ desolate-brushlands-56729... up, run.6788
Traceback (most recent call last):
  File "ebooks.py", line 79, in <module>
    source_tweets_iter, max_id = grab_tweets(api,max_id)
  File "ebooks.py", line 51, in grab_tweets
    max_id = user_tweets[len(user_tweets)-1].id-1
IndexError: list index out of range

这是代码:

def grab_tweets(api, max_id=None):
    source_tweets=[]
    user_tweets = api.GetUserTimeline(screen_name=user, count=200, max_id=max_id, include_rts=True, trim_user=True, exclude_replies=True)
    max_id = user_tweets[len(user_tweets)-1].id-1
    for tweet in user_tweets:
        tweet.text = filter_tweet(tweet)
        if len(tweet.text) != 0:
            source_tweets.append(tweet.text)
    return source_tweets, max_id

if __name__=="__main__":
     order = ORDER
    if DEBUG==False:
       guess = random.choice(range(ODDS))
     else:
        guess = 0

    if guess == 0:
            if STATIC_TEST==True:
            file = TEST_SOURCE
              print ">>> Generating from {0}".format(file)
            string_list = open(file).readlines()
            for item in string_list:
            source_tweets = item.split(",")    
        else:
            source_tweets = []
            for handle in SOURCE_ACCOUNTS:
                user=handle
                api=connect()
                 max_id=None
                for x in range(17)[1:]:
                    source_tweets_iter, max_id = grab_tweets(api,max_id)
                     source_tweets += source_tweets_iter

1 个答案:

答案 0 :(得分:0)

回溯告诉我们错误在这里:

max_id = user_tweets[len(user_tweets)-1].id-1
如果user_tweets是一个空列表,

将超出范围。在尝试访问其值之前,您可以检查以确保它没有。

if len(user_tweets) > 0:
  max_id = user_tweets[-1].id-1

请注意user_tweets[-1]的使用。使用负索引从末尾开始向后计数,因此列表的最后一个元素始终位于[-1]