我正在尝试调用递归方法,并在while
条件为False
时退出调用它。虽然,我得到的是当COUNT_NUM
为0时,方法只是不断重复并返回print
s
不确定我做错了什么
import urllib.request
from bs4 import BeautifulSoup
URL = input("Enter URL: ")
COUNT = input("Enter count: ")
POS = input("Enter position: ")
def retrieveNames(url, count=1, position=1):
""" Retrieves a name from url """
POSITION_NUM = int(position)
COUNT_NUM = int(count)
if (POSITION_NUM< 1): return
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, "html.parser")
tags = soup("a")
countNum = COUNT_NUM - 1
tag = tags[POSITION_NUM-1]
print("COUNT:", countNum > 0)
while countNum > 0:
retrieveNames(tag.get("href"), countNum, position)
print(tag.contents[0])
return
retrieveNames(URL, COUNT, POS)
答案 0 :(得分:0)
您正在进入无限循环,因为您以递归方式调用函数,这意味着您的变量countnum现在存在于多个范围中:原始函数调用和递归调用。这意味着当调用retrieveNames时countnum发生的任何事情都不会影响while循环中countnum的值。因此,你永远不会离开while循环。 所以你想做的是返回countnum:
while countNum > 0:
countNum = retrieveNames(tag.get("href"), countNum, position)
return countNum
或者将while语句更改为if语句。