方法进入无限循环

时间:2017-06-28 13:14:03

标签: python python-3.x

我正在尝试调用递归方法,并在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)

1 个答案:

答案 0 :(得分:0)

您正在进入无限循环,因为您以递归方式调用函数,这意味着您的变量countnum现在存在于多个范围中:原始函数调用和递归调用。这意味着当调用retrieveNames时countnum发生的任何事情都不会影响while循环中countnum的值。因此,你永远不会离开while循环。 所以你想做的是返回countnum:

while countNum > 0:
    countNum = retrieveNames(tag.get("href"), countNum, position)
return countNum

或者将while语句更改为if语句。