为什么这段代码无限循环?

Nli*_*tis 2 python infinite-loop

我正在为体验和知识编写搜索引擎.现在,我正在构建一个爬虫及其附带的实用程序.其中之一是URL规范化程序.这就是我现在正在努力构建的内容,更具体地说,我不得不采用一种方法来获取网址,并将字母大写为"%"符号.我的代码到目前为止:

def escape_sequence_capitalization(url):
        ''' The method that capitalizes letters in escape sequences.
        All letters within a percent - encoding triplet (e.g. '%2C') are case
        insensitive and should be capitalized.

        '''
    next_encounter = None
    url_list = []
    while True:
        next_encounter = url.find('%')
        if next_encounter == -1:
            break

        for letter in url[:next_encounter]:
            url_list.append(letter)

        new_character = url[next_encounter + 1].upper()
        url_list.append(new_character)
        url = url[next_encounter:]

    for letter in url:
        url_list.append(letter)

    return ''.join(url_list)
Run Code Online (Sandbox Code Playgroud)

有人可以指导我到我的错误的位置吗?我会很感激.谢谢.

编辑:这是我想要实现的:

http://www.example.com/a%c2%b1b ? http://www.example.com/a%C2%B1b
Run Code Online (Sandbox Code Playgroud)

msw*_*msw 10

通过静态分析,它永远循环,因为你while True永远不会破坏.那么哪里可以打破?仅在break声明next_encounter变为等于-1 时才在声明中; 所以你可以推断它永远不会.

为什么不呢?尝试print next_encounter之后url.find.你会很快看到的

url = url[next_encounter:]
Run Code Online (Sandbox Code Playgroud)

几乎你所希望的,只有它给你一个比你希望的更多的角色.

为什么我这样呈现呢?主要是因为print学习语言的人经常低估其价值.