【发布时间】: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