用户\u在tweet上留言我的python代码出了什么问题?

2024-05-03 06:12:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个朋友的代码,当我运行heroku时,会出现以下错误:

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

好吧,我知道这个错误说明了一些空列表(哪个列表?我不知道这意味着什么,所以请帮助我)和有问题的行代码属于电子书.py,就这样:

^{pr2}$

原来的电子书.py您可以在这里找到:https://gist.github.com/laurenorsini/f38c0113e41e9b4504a7

好朋友,对不起我的英语:(你能帮我吗?在


Tags: 代码inpyid列表错误line朋友
2条回答

您在哪里设置用户?在

为了捕捉错误,我会做如下操作:

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)
    # if you're expecting it to succeed, use a try
    try:
        max_id = user_tweets[len(user_tweets)-1].id-1
    # if user_tweets is empty an IndexError is raised
    except IndexError:
        # do any internal logging here before the return
        return source_tweets, None

    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:

^{pr2}$

这样就可以捕捉到您的错误,但是您仍然需要测试并确保它在您知道它应该返回填充列表时正常工作。检查用户设置是否正确,API是否正常工作等

如果没有用户tweets并且user_tweets是一个空列表,会发生什么?在

那么,做user_tweets[len(user_tweets) - 1]将等同于做user_tweets[0 - 1],即{}。如果您执行my_list[-1],则说明Python要查找列表中的最后一个元素。在

但是,user_tweets是空的,那么就不可能获取最后一个元素——列表中什么也没有。所以,Python抛出了一个异常。在

我会尝试通过添加一个检查来修复您的代码,以确保user_tweets不是空的,也许可以执行以下操作:

def grab_tweets(api, max_id=None):
    user_tweets = api.GetUserTimeline(
        screen_name=user, count=200, max_id=max_id, include_rts=True, 
        trim_user=True, exclude_replies=True)   

    if len(user_tweets) > 0:
        source_tweets=[]   
        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
    else: 
        # return a default value?
        # throw an exception?

相关问题 更多 >