python for循环中的假阳性

2024-04-20 08:38:28 发布

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

我一直在写一个简单的方法来检查一个网址是否有子目录,如果有子目录,就把它们分成一个列表。我编写的代码应该忽略URL的最后一个子目录(这是一个错误,因为我注意到循环在用一个子目录检查URL时迭代了大约4次)。你知道吗

代码如下:

import re

def check_web_address(web_address):
    #set the pattern, then check if it matches
    pattern = re.compile(r"[\w\-\.]*")
    pat_check = pattern.match(web_address)

    #if it does, separate the subdirs, assuming we checked for '/' earlier
    if pat_check:
        pattern_span = pat_check.span()
        web_add_no_subdir = web_address[pattern_span[0]:pattern_span[1]]
        raw_web_subs = web_address[pattern_span[1]:]
        web_subs = []

        """Check if there is an additional slash,
            then separate our subdir if the regex matches."""
        slash = "/"
        for slash in raw_web_subs[1:]:
            pat_span = pattern.match(raw_web_subs[1:]).span()
            real_end = pat_span[1]+1
            web_subs.append(raw_web_subs[:real_end])
            raw_web_subs = raw_web_subs[real_end:]

        separated = [
            web_add_no_subdir,
            web_subs
            ]
        return separated
    else:
        return None

这段代码实际上返回了一个子目录,正如我的unittest所说,它成功地运行了测试:

checked_add = wc.check_web_address("www.google.com/docs")
self.assertEqual(checked_add[0], 'www.google.com')
self.assertEqual(checked_add[1][0], '/docs')

因此,我在python控制台中测试了以下内容:

>>test = "/docs"
>>"/" in test[1:]
false

另外,如果我让python打印

raw_web_subs[1:]

在循环开始之前,我得到字符串“docs”,没有正斜杠。你知道吗

我错过了什么?你知道吗


Tags: the代码addwebdocsrawifaddress
1条回答
网友
1楼 · 发布于 2024-04-20 08:38:28

正如@tadhgmandald Jensen所解释的,现在的情况是Python正在迭代每个字符,@Evert建议使用一个'while'循环,它给出了我最初想要的结果。你知道吗

我可能会像@Blckknght建议的那样使用urllib.parse。你知道吗

@thelazyscript提到,还可以使用test=some\u string来分隔字符串_url.split文件('/'). 这是一个比我想象的更优雅的解决方案。你知道吗

谢谢大家。你知道吗

相关问题 更多 >