【问题标题】:Python - recursive function returns None [duplicate]Python - 递归函数返回无[重复]
【发布时间】:2020-08-24 17:57:39
【问题描述】:

我正在尝试清理 URL,并从中仅提取 ID(通过跳过 URL 部分)。通过进行一些调试,我可以看到我正在寻找的值正在打印,但是,没有返回(或返回 None)

这是代码:

def _sanitize_urls(urls=None):
    redact_list = [
        ("abcd.google.com", 3),
        ("xyz.yahoo.com", 4),
    ]
    urls_sanitized = []
    redact_found = [redact for redact in redact_list if redact[0] in urls]
    if redact_found:
        urls = urls.split(" ")
        print(urls)
        urls_sanitized = [
            words.split("/")[redact_found[0][1]] if redact_found[0][0] in words else words for words in urls
        ]
        print(urls_sanitized)
        urls_sanitized = " ".join(urls_sanitized)
        print(urls_sanitized)
        redact_found = [redact for redact in redact_list if redact[0] in urls_sanitized]
        print(redact_found)
        if not redact_found:
            print(urls_sanitized)
            return urls_sanitized
        else:
            _sanitize_urls(urls_sanitized)


def main():
    urls = "https://abcd.google.com/ID-XXXX and https://xyz.yahoo.com/Id/ID-XXXX"
    redact_exists = _sanitize_urls(urls)
    print(redact_exists)


if __name__ == "__main__":
    main()

我期望的输出是 =>“ID-XXXX 和 ID-XXXX”。我现在得到的输出是无。

在我这边进行一些调试 =>

['https://abcd.google.com/ID-XXXX', 'and', 'https://xyz.yahoo.com/Id/ID-XXXX']
['ID-XXXX', 'and', 'https://xyz.yahoo.com/Id/ID-XXXX']
ID-XXXX and https://xyz.yahoo.com/Id/ID-XXXX
[('xyz.yahoo.com', 4)]
['ID-XXXX', 'and', 'https://xyz.yahoo.com/Id/ID-XXXX']
['ID-XXXX', 'and', 'ID-XXXX']
ID-XXXX and ID-XXXX
[]
ID-XXXX and ID-XXXX
None

如您所见,print 打印正确的值,直到最后一刻,但它没有返回到 main 函数,而是返回 None。有什么想法吗?

【问题讨论】:

  • 你必须返回递归调用的输出:return _sanitize_urls(urls_sanitized)

标签: python python-3.x recursion


【解决方案1】:

_sanitize_urls 函数的最后一行,你有

 _sanitize_urls(urls_sanitized)

在此之后您的函数不再有代码。在 Python 中,如果一个函数在没有明确的 return 语句的情况下用完代码,则会自动返回 None

【讨论】:

  • 谢谢丹尼尔。那解决了它。很高兴知道为什么会这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 2022-08-13
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2013-10-13
  • 2021-09-28
相关资源
最近更新 更多