【问题标题】:Using next() method to predict error with the next iteration使用 next() 方法预测下一次迭代的错误
【发布时间】:2020-09-21 21:13:43
【问题描述】:

我想通过Tweepy 获得用户的朋友,并且在特定时间间隔内我可以获得的朋友数量有限制。为了处理这个查询限制,我添加了一个带有 try-except 的条件。逻辑是让 Tweepy 尝试获取下一个朋友,如果出现错误,请等待 15 分钟。但我意识到next() 方法不起作用。我做错了什么?

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


def get_user_friends(screen_name):
    friends = []
    for user in tweepy.Cursor(api.friends, screen_name=screen_name).items(200):
        friends.append(user.screen_name)

        try:
            test = user.next()  # Here
        except:
            time.sleep(60 * 15)
            continue

    return friends

【问题讨论】:

  • 当前好友报错,是等待15分钟重试,还是转到下一个好友?
  • @jrmylow 我想让user.next() 检查下一位朋友的访问权限。如果不可能,Tweepy 将返回一个限制错误。因此,程序必须等待 15 分钟。但如果这次调用没有错误,for 循环可以继续。

标签: python methods twitter tweepy


【解决方案1】:

你需要使用光标的 next() 方法,这样就可以了:

import time
def limit_handled(cursor):
    while True:
        try:
            yield cursor.next()
        except tweepy.RateLimitError:
            time.sleep(15 * 60)
        except StopIteration:
            return
        
def get_user_friends(screen_name):
    friends = []
    for user in limit_handled(tweepy.Cursor(api.friends, screen_name=screen_name).items(200)):
        friends.append(user.screen_name)
    
    return friends

您也可以查看文档here

【讨论】:

  • OSError: [Errno 65] 没有到主机的路由
  • 这个错误是从哪里来的?你是如何执行这段代码的?
  • 我只是用def get_user_friends(screen_name):块替换它。
  • 你换了什么?你应该用我发送的 2 个函数替换你的 get_user_friends。
  • 这个错误与代码无关(我发给你的代码是可以的,我已经测试过了)。这似乎与您的网络连接更相关。你能用 tweepy 得到什么吗?只需尝试搜索任何推文以查看连接是否正常。您也可以检查以下问题:stackoverflow.com/questions/43074486/…,或与您的错误相关的任何其他问题。
猜你喜欢
  • 2013-04-21
  • 2014-05-23
  • 1970-01-01
  • 2018-06-19
  • 2014-06-30
  • 2014-06-30
  • 2020-12-30
  • 2016-03-21
  • 2017-12-10
相关资源
最近更新 更多