如何干掉Twitter API费率限制的处理

时间:2015-11-08 23:18:26

标签: python twitter exception-handling dry

我有以下代码模式来处理访问Twitter API时出现的各种异常。基本模式是:

while True:
    try:
        # 'access twitter api'
    except tweepy.error.TweepError:
        # 'handling the error'

我有多种方法,例如get_tweets()get_friends(),所有这些都使用相同的错误处理模式。如何干这个?

例如,下面是我的get_tweets()方法。如何在其他方法中重复使用此方法中的错误处理?

def get_tweets(self, screen_name):        
    while True:
        try:
            rs = self.api.user_timeline(screen_name=screen_name)

        except tweepy.error.TweepError, e:
            if e.response.status_code == 404:
                print "%s does not exist" % (twitter_id)
                return None

            elif e.response.status_code == 429:
                print "out of quota"
                time.sleep(60 * 15)
                continue

            elif e.response.status_code == 503:
                print "Twitter down"
                time.sleep(60 * 15)
                continue

            else:
                print "%s, %s" % (twitter_id, e)
                continue

1 个答案:

答案 0 :(得分:1)

如果except语句的内容重复多个位置,那么它可能是重用的好选择。

我看到你可以采取多种方式,这里有一些选择。

  1. 定义可由多种方法使用的错误处理程序:
  2.    
    def get_tweets(self, screen_name):
        while True:
            try:
                rs = self.api.user_timeline(screen_name=screen_name)
            except tweepy.error.TweepError, e:
                error_handler(e)
    
    def error_handler(self, e):
        # handle the error
    

    当然,有了这个选项,我们最终会重复      

    while True:
        try:
            # access twitter api
        except:
            # handle error
    

    2。相反,你可以创建一个通用的twitter调用函数,它接受方法和方法的一些参数。    

    def twitter_request(self, twitter_method, *args, **kwargs):
        while True:
            try:
                twitter_method(*args, **kwargs)
            except tweepy.error.TweepError, e:
                # handle the error
    
    def get_tweets(self, screen_name):
        twitter_request(self.api.user_timeline, screen_name=screen_name)
    

    如果您需要通过将错误处理函数作为参数添加到twitter_request

    来替换某些api调用的错误处理函数,也可以组合这些选项。