当前位置: 首页 > 知识库问答 >
问题:

RuntimeError:使用Tweepy收集推文时,超出了cmp '中的最大递归深度

乜心思
2023-03-14

我试图使用 tweepy 从推特 api 收集大量推文。我有一个包含大约一万个推文ID的文本文件。我的程序通读文件,抓取每条推文,以及它正在回复的推文。然后,它将每条推文的文本以及每个作者的用户名保存在相应的文本文件中。代码如下:

auth = tweepy.OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)

api = tweepy.API(auth)

tweetsFile = open("srcstic.txt", "r")
tweets_seen = set() # holds tweets already seen

def getNextLine():
    while True:

        tweetID = tweetsFile.readline()
        getTweetObj(tweetID)

        if not tweetID:
            break

def getTweetObj(tweetID):
    try:
        tweetObj = api.get_status(tweetID)
        #sleep(11)
    except tweepy.error.TweepError:
        getNextLine()
    else:
        pass
    tweet = tweetObj.text.encode("utf8")
    idnum = tweetObj.in_reply_to_status_id_str

    try:
        former = api.get_status(idnum)
    except tweepy.error.TweepError:
        getNextLine()
    else:
        printFiles(former, tweetObj, tweet)

def printFiles(former, tweetObj, tweet):

    callUserName = former.user.screen_name
    responseUserName = tweetObj.user.screen_name

    if tweet not in tweets_seen:

        with open("callauthors.txt", "a") as callauthors:
                cauthors = callUserName + "\n"
                callauthors.write(cauthors)

        with open("responseauthors.txt", "a") as responseauthors:
                rauthors = responseUserName + "\n"
                responseauthors.write(rauthors)

        with open("response_tweets.txt", "a") as responsetweets:
                output = (tweetObj.text.encode('utf-8')+"\n")
                responsetweets.write(output)

        with open("call_tweets.txt", "a") as calltweets:
                output = (former.text.encode('utf-8')+"\n")
                calltweets.write(output)
                tweets_seen.add(tweet)

    getNextLine()

但是,暂时一切正常,然后我得到以下错误:

 File "gettweets2.py", line 68, in <module>
getNextLine()
  File "gettweets2.py", line 21, in getNextLine
getTweetObj(tweetID)
  File "gettweets2.py", line 40, in getTweetObj
getNextLine()
  File "gettweets2.py", line 21, in getNextLine
getTweetObj(tweetID)
  File "gettweets2.py", line 31, in getTweetObj
getNextLine()
  File "gettweets2.py", line 21, in getNextLine
getTweetObj(tweetID)
  File "gettweets2.py", line 31, in getTweetObj
getNextLine()
  File "gettweets2.py", line 21, in getNextLine
getTweetObj(tweetID)
  File "gettweets2.py", line 31, in getTweetObj
getNextLine()
........
........
  File         "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_    abcoll.py", line 540, in update
if isinstance(other, Mapping):
  File     "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py", line 141, in __instancecheck__
subtype in cls._abc_negative_cache):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_weakrefset.py", line 73, in __contains__
return wr in self.data
RuntimeError: maximum recursion depth exceeded in cmp

知道这里出了什么问题吗?谢谢。

共有2个答案

江超英
2023-03-14

正如我所能理解的,读取错误会使您陷入无限递归,因为每个例程都调用另一个例程。如果获取下一行不能使您摆脱错误条件,您将在不到一秒的时间内超过堆栈限制。

如果没有别的,就用几个print语句做一个快速检查:在遇到tweetIDs时打印出来,并贴上标签以标识打印位置。直接修复很可能包括编写第二个例程来获取原始推文,而没有重现的能力。这假设您只需要当前tweet的直接父节点,而不是整个链。

黄元章
2023-03-14

您只能递归地调用函数999次,之后您会收到该错误。相反,您可以使用条件语句从函数外部调用或创建生成器。

 类似资料:
  • 问题内容: 我正在尝试从Django项目网站上的第1篇教程学习Django。我可能会缺少一些明显的东西,但是在遵循所有说明后,当我运行命令时 我在请求的结尾处得到了错误消息,以寻求帮助(为简便起见,我仅将错误消息的重复行的前几行发布)。 这是我在网上找到的一些解决方案/建议,但对我没有帮助。 1)sys.setrecursionlimit(1500)。 这对我不起作用。 2)。DjangoRunt

  • 问题内容: 我从星期一开始使用Python进行编程。我很喜欢学习它。但是我一直试图了解如何在tkinter菜单之间切换时避免递归!我确信这是一个非常基本的问题,感谢您宽容我对此主题的无知,但我无法在其他地方找到答案。 我现在正在做的最终是给我错误:RuntimeError:调用Python对象时超出了最大递归深度 这是我目前正在使用的模式。更新:下面的代码现在是完整的隔离副本,再现了我面临的问题!

  • 我对Python很陌生。我写了一个关于返回 x 在排序的重复元素数组 A 中的出现次数的函数: 错误是:运行时错误:超出最大递归深度。有人知道如何解决它吗?

  • 问题内容: 我使用以下代码解决了Euler项目的问题10,该代码通过强力工作: 这三个功能的工作方式如下: isPrime 检查数字是否为质数; primeList 返回一个列表,其中包含一组在一定范围内且限制为“ n”的素数,并且; sumPrimes 对列表中所有数字的值求和。(不需要最后一个功能,但是我喜欢它的清晰度,特别是对于像我这样的初学者。) 然后,我编写了一个新函数 primeLis

  • 我似乎不知道如何使工作。如何修复此问题,使矩形继续向下移动?

  • 周一开始用Python编程。我喜欢学习它。但是当在tkinter菜单之间切换时,我一直试图理解如何避免递归。我确信这是一个非常基本的问题,我很感激你能容忍我在这个问题上的无知,但是我在别处找不到答案。 我现在所做的是,最终给了我一个错误:RuntimeError:调用Python对象时超出了最大递归深度 这是我目前使用的模式。更新:下面的代码现在是一个完整的、独立的副本,重现了我面临的问题!:D