递归限制python错误,调用函数x的次数

递归限制python错误,调用函数x的次数,python,recursion,Python,Recursion,我有一些从互联网上获取资源的代码,如下所示: def ScrapeFromUrl(url): with urllib.request.urlopen(url) as response: html = response.read() urlToFile('main', html.decode('utf-8')) webSoup = BeautifulSoup(html, 'html.parser') mainContent =

我有一些从互联网上获取资源的代码,如下所示:

def ScrapeFromUrl(url):
    with urllib.request.urlopen(url) as response:
        html = response.read()
        urlToFile('main', html.decode('utf-8'))
        webSoup = BeautifulSoup(html, 'html.parser')
        mainContent = webSoup.find("div", { "id" : "main" })
        generalImdbData['nextPageUrl'] = mainContent.findChildren()[0].findChildren()[2].find('a').get('href')
        generalImdbData['totalResults'] = int(re.search( r'(\d+)(?!.*\d)', mainContent.findChildren()[0].findChildren()[2].span.contents[0]).group(1)) 
        generalImdbData['loadedResults'] = int(re.search( r'\-(\d+)', mainContent.findChildren()[0].findChildren()[2].span.contents[0]).group(1))

        actorsContainer = mainContent.findAll("div", {"class": "lister-list"})[0]
        for actor in actorsContainer.findAll("div", {"class": "lister-item"}):
            SearchResultsToActorObjects(actor)

        urlToFile('data', str(mainContent))
        GoToNextPageUrl(generalImdbData['loadedResults'], generalImdbData['nextPageUrl'])

def GoToNextPageUrl(loadedResultsCount, nextUrl):
    if loadedResultsCount >= generalImdbData['totalResults']:
        for a in actorObjectList:
            a.printActor()
            a.insertIntoDB()
        actorObjectList.clear()
    else: 
        for a in actorObjectList:
            a.printActor()
            a.insertIntoDB()

        actorObjectList.clear() 
        ScrapeFromUrl(generalImdbData['baseUrl'] + nextUrl)
函数的调用方式如下:

ScrapeFromUrl(generalImdbData['originalSearchUrl'])
但我遇到的问题是,这些函数被调用了大约5万次。所以我得到了这个递归极限错误

如何防止这种情况发生?

ScrapeFromUrl()
调用
GoToNextPageUrl()
,调用
ScrapeFromUrl()
,调用
GoToNextPageUrl()
,等等

这将创建一个无限递归

您需要重新组织代码,这样函数就不会无休止地相互调用。

ScrapeFromUrl()
调用
GoToNextPageUrl()
,调用
ScrapeFromUrl()
,调用
GoToNextPageUrl()
,等等

这将创建一个无限递归


你需要重新组织你的代码,这样函数就不会无休止地互相调用。

如果
GoToNextPageUrl
中的station为
true
,那么递归就停止了。是的,这只会发生在10次之后,成千上万次。但这并不意味着它是无限的。接下来我就如何防止这种情况提出建议。“重新组织你的代码”有点笼统,指向一个特定的维度会有很大帮助。如果
GoToNextPageUrl
中的statation为
true
,那么递归就停止了。是的,这只会发生在10次之后,成千上万次。但这并不意味着它是无限的。接下来我就如何防止这种情况提出建议。“重新组织您的代码”有点笼统,指向特定维度会有很大帮助。我所知道的保持递归堆栈较小的主要方法是在每个阶段将大小为
n
的问题细分为大小为
n/2
的两个子问题,而不是将大小为
1
和大小为
n-1
的子问题。我没有时间尝试为您的案例解决它(因此我将此作为注释),但请参见示例。我知道保持递归堆栈较小的主要方法是在每个阶段将大小
n
的问题细分为大小
n/2
的两个子问题,而不是进入大小为
1
和大小为
n-1
的子问题。我没有时间尝试为您的案例解决这个问题(因此我将此作为评论),但请参见示例。