2014-12-08 50 views
1

我正在收集大量用户的推文,因此该脚本将在无监督的情况下运行数天/周。 我有一个user_id列表big_list。 我认为有些推文是私人的,我的脚本停下来,所以我想让脚本继续下一个user_id(也许会打印一条警告消息)。在Tweepy中优雅地处理user_timeline方法的错误和例外

我也会喜欢上如何使其健壮到其他错误或异常(例如,用于脚本在错误或超时睡眠)

这是什么,我有一个总结建议:

import tweepy 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 
my_api = tweepy.API(auth) 

for id_str in big_list: 
    all_tweets = get_all_tweets(id_str=id_str, api=my_api) 
    #Here: insert some tweets into my database 

get_all_tweets函数抛出的错误,它基本上重复调用:

my_api.user_timeline(user_id = id_str, count=200) 

以防万一,它给人的回溯是后续ing:

/home/username/anaconda/lib/python2.7/site-packages/tweepy/binder.pyc in execute(self) 
    201     except Exception: 
    202      error_msg = "Twitter error response: status code = %s" % resp.status 
--> 203     raise TweepError(error_msg, resp) 
    204 
    205    # Parse the response payload 

TweepError: Not authorized. 

让我知道你是否需要更多的细节。谢谢!

-----------编辑--------

This question有一些信息。

我想我可以尝试做一个try/except块为不同类型的错误?我不知道所有相关的,所以有经验的人的最佳实践将不胜感激!

---------- EDIT 2 -------

我得到一些Rate limit exceeded errors所以我做了循环睡眠这样。 else部分将处理“未经授权”错误和一些其他(未知?)错误。尽管如此,这仍然让我失去了big_list中的元素。

for id_str in big_list: 
    try: 
     all_tweets = get_all_tweets(id_str=id_str, api=my_api) 
     # HERE: save tweets 
    except tweepy.TweepError, e: 
     if e == "[{u'message': u'Rate limit exceeded', u'code': 88}]": 
      time.sleep(60*5) #Sleep for 5 minutes 
     else: 
      print e 

回答

4

你可能只是做了一个“通”:

import tweepy 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 
my_api = tweepy.API(auth) 

for id_str in big_list: 
    try: 
     all_tweets = get_all_tweets(id_str=id_str, api=my_api) 
    except Exception, e: 
     pass 
+0

感谢您的回答。您的解决方案有效,但我也在寻找处理其他相关例外的方法。我编辑了我的问题以添加其中的一个(超出速率限制)。对于“未经授权”我可以继续循环,但为了超过速率限制,我需要''time.sleep()',否则我会一直被拒绝。 – cd98 2014-12-08 16:34:54

+0

这应该适用于不同类型的例外情况 http://stackoverflow.com/a/17168626/2838313 当您得到率异常时,您可能会睡眠所需的时间! (同时保存循环的当前状态) – abad 2014-12-08 16:41:00

5

我真的很晚,但我在这些日子里所面临的同样的问题。为了time.sleep()的需要,我通过alecxe reply to this question解决了这个问题。

我在过去潜水,但我希望这将有助于未来的人。