在尝试使用Cursor对象遍历跟随者列表时,我试图找到正确的方法来处理速率限制。这是我正在尝试的:
while True:
try:
for follower in tweepy.Cursor(api.followers, id=root_usr).items():
print(follower.id)
except tweepy.TweepError:
# hit rate limit, sleep for 15 minutes
print('Rate limited. Sleeping for 15 minutes.')
time.sleep(15 * 60 + 15)
continue
except StopIteration:
break
这可能是不正确的,因为异常会使for
循环从头开始。在所有root_usr
的追随者中迭代同时处理速率限制问题的正确方法是什么?
答案 0 :(得分:0)
您可以在变量上构造 Cursor
实例并在 try-catch 中调用 next(cursor)
。您可以通过这种方式处理 StopIteration 和 TweepError。
喜欢
cursor = tweepy.Cursor(api.followers, id=root_usr).items()
# or tweepy.Cursor(api.followers, id=root_usr).items().iter()
while True:
try:
follower = next(cursor)
print(follower.id)
except StopIteration:
break
except tweepy.TweepError:
# Handle this, sleep, log, etc.
pass
答案 1 :(得分:0)
code snippets section of the documentation 下有一个示例,建议创建一个包装函数来处理错误处理。
def limit_handled(cursor):
while True:
try:
yield next(cursor)
except tweepy.RateLimitError:
time.sleep(15 * 60)
except StopIteration:
print("Done")
break
for follower in limit_handled(tweepy.Cursor(api.followers, id=root_usr).items()):
print(follower.id)
此外,我建议将计数设置为最大值 tweepy.Cursor(api.followers, id=root_usr, count=200).items()
,以充分利用每个 API 调用。