方法进入无限循环

2024-09-27 07:32:19 发布

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

我试图调用一个递归方法,并在while条件为False时停止调用它。不过,我得到的结果是,当COUNT_NUM为0时,该方法只会不断重复自身并同时返回print

不知道我做错了什么

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)

Tags: 方法urlinputhtmltagcountpositionnum
1条回答
网友
1楼 · 发布于 2024-09-27 07:32:19

因为递归调用函数,所以运行在无限循环中,这意味着变量countnum现在存在于多个作用域中:原始函数调用和递归调用。这意味着无论调用retrieveNames时countnum发生了什么,都不会影响while循环中countnum的值。因此,您将永远无法脱离while循环。 所以您要做的是返回countnum:

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

或者将while语句更改为if语句。你知道吗

相关问题 更多 >

    热门问题