[英]How to DRY the handling of Twitter API rate limit
我有以下代码模式来处理在访问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
如果except语句的内容在多个位置重复,则可能是重用的不错选择。
我看到您可以通过多种方式执行此操作,以下是一些选项。
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调用的错误处理函数的能力,也可以组合使用这些选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.