Python 在tweepy中使用光标处理速率限制异常

Python 在tweepy中使用光标处理速率限制异常,python,tweepy,Python,Tweepy,在使用游标对象遍历跟随者列表时,我试图找到处理速率限制的正确方法。以下是我正在尝试的: 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

在使用游标对象遍历跟随者列表时,我试图找到处理速率限制的正确方法。以下是我正在尝试的:

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\u usr
的追随者的正确方法是什么?

您可以在一个变量上构造
Cursor
实例,并在try catch中调用
next(Cursor)
。你可以用这种方式处理StopIteration和TweepError


下面有一个示例建议使用包装器函数来处理错误处理

def limit_已处理(光标):
尽管如此:
尝试:
下一步(光标)
除tweepy.RateLimitError外:
时间。睡眠(15*60)
除停止迭代外:
打印(“完成”)
打破
对于限制中的跟随者(tweepy.Cursor(api.followers,id=root\u usr.items()):
打印(follower.id)

另外,我建议将count设置为max,
tweepy.Cursor(api.followers,id=root\u usr,count=200).items()
,以充分利用每个api调用。

for循环应该在try/except子句之上,这样它就可以在每个用户级别上进行尝试,而不是在整个循环上进行尝试,但它不是
tweepy.Cursor吗(api.followers,id=root\u usr).items()
将引发异常?
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