我有一些代码可以从互联网获取一些资源,如下所示:
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'])
但我遇到的问题是这些函数被调用了大约 50k 次。所以我得到了这个递归限制错误。
如何防止这种情况发生?
最佳答案
ScrapeFromUrl()
调用 GoToNextPageUrl()
,后者又调用 ScrapeFromUrl()
,后者又调用 GoToNextPageUrl()
等等等等等等
这会创建无限递归。
您需要重新组织代码,以便函数不会无休止地相互调用。
关于python - python,当调用函数x次时,递归限制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611264/