循环中的python错误

时间:2016-06-07 01:04:47

标签: python python-3.x

我一直在编写一个简单的方法来检查网址是否包含子目录,如果有,则将它们分成一个列表。我写的代码应该忽略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”,没有正斜杠。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

正如@ TadhgMcDonald-Jensen解释的那样,正在发生的事情是Python正在迭代每一个字符,@ Evert的建议使用'while'循环,这给出了我最初寻找的结果。

我可能最终会使用urllib.parse作为@Blckknght建议。

@TheLazyScripter提到可以做的是使用test = some_string_url.split('/')分隔字符串。这是一个比我想象的更优雅的解决方案。

谢谢大家。