使用Tweepy收集tweet时“RuntimeError:cmp中超过了最大递归深度”

2024-06-25 23:58:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用tweepy从twitter api收集大量tweets。我有一个文本文件,包含大约一万个tweet id。我的程序读取文件,抓取每个tweet,以及它正在回复的tweet。然后,它将每条tweet的文本以及每个作者的用户名保存在各自的文本文件中。代码如下:

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()

但是,在一段时间内一切正常,然后我得到以下错误:

^{pr2}$

有什么问题吗? 谢谢。在


Tags: txtapioutputaswithopentweetstweet
2条回答

我能读懂的最好的是,一个读错误会让你陷入无限递归,因为每个例程都会调用另一个例程。如果获取下一行并没有使您脱离错误条件,那么您将在不到一秒钟的时间内超过堆栈限制。在

如果没有其他内容,请快速检查几条打印语句:在遇到tweetID时将其打印出来,并标记为识别打印的位置。直接修复很可能包括编写第二个例程来获取原始tweet,而不具备重现的能力。这假设您只需要当前tweet的直接父级,而不是整个链。在

你只能递归地调用一个函数999次之后,你得到了那个错误。您可以改为使用条件语句从函数外部调用或创建生成器。在

相关问题 更多 >