Python:嵌套的while循环将从第一个while开始“继续”,而不是嵌套的while

Posted

技术标签:

【中文标题】Python:嵌套的while循环将从第一个while开始“继续”,而不是嵌套的while【英文标题】:Python: Nested while loop will 'continue' from the first while, not the nested while 【发布时间】:2019-08-21 21:28:40 【问题描述】:

我有一个嵌套的while 语句,在第二个语句中我有一个try 块。在except 块中,我有一些代码,然后是continue。问题是当它遇到continue 时,它将从first while 开始,而不是预期的嵌套while

我一直在寻找,但我不确定这是否是预期的行为?

while iRowCount < iMaxRows:
    # ...
    # Code here for getting information from a database
    # ...

    print("Iterating")
    while i2RowCount < i2MaxRows:
        try:
            readUrl = "someURL" # This is assigned from the database
            BrowserObj.get(readUrl) # Using Webdriver to navigate to the URL

            elem = BrowserObj.find_element_by_link_text("Find Me")
            elemHref = elem.get_attribute('href')
            BrowserObj.get(elemHref) # Navigate to new link found

            # This is never reached 
            theOutput = BrowserObj.find_element_by_css_selector(".classNames.here")
            print("Out: " + str(theOutput))
            exit()

        except NoSuchElementException as E:
            print("Not found. (Iteration: #" + str(i2RowCount) + ")")
            i2RowCount += 1
            continue

        i2RowCount += 1
    iRowCount += 1

异常将在elem = BrowserObj.find_element_by_link_text("Find Me") 处引发。但我的输出将如下:

Iterating
Not found. (Iteration: #0)
Iterating
Not found. (Iteration: #0)
Iterating
Not found. (Iteration: #0)
Iterating
Not found. (Iteration: #0)
Iterating
Not found. (Iteration: #0)
...this will keep going.

因此,由于某种原因,continue 似乎回到了我的第一个循环,而不是我的嵌套循环......我在这里做错了吗?

【问题讨论】:

欢迎来到 ***。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确说明问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您指定的问题。您发布的代码有几个未定义的符号,并且缺少设置代码。 【参考方案1】:

我尝试重新创建它,但无法做到。请尝试发布可以运行的代码 sn-p 并显示此错误。

这是我快速编写的更通用的版本,似乎没有重现这个问题:

i = 0
j = 0


while i < 10:
    print(f'OUTER LOOP: i')
    i += 1
    while j < 10:
        print(f'INNER LOOP: j')
        try:
            j += 1
            raise Exception("CRASHING!")
        except:
            print("CATCHING")
            continue

输出:

OUTER LOOP: 0
INNER LOOP: 0
CATCHING
INNER LOOP: 1
CATCHING
INNER LOOP: 2
CATCHING
INNER LOOP: 3
CATCHING
INNER LOOP: 4
CATCHING
INNER LOOP: 5
CATCHING
INNER LOOP: 6
CATCHING
INNER LOOP: 7
CATCHING
INNER LOOP: 8
CATCHING
INNER LOOP: 9
CATCHING
OUTER LOOP: 1
OUTER LOOP: 2
OUTER LOOP: 3
OUTER LOOP: 4
OUTER LOOP: 5
OUTER LOOP: 6
OUTER LOOP: 7
OUTER LOOP: 8
OUTER LOOP: 9

如您所见, continue 似乎只会影响内部循环。

【讨论】:

【参考方案2】:

这似乎是一次性问题...我仍然不清楚为什么会发生,但现在似乎工作正常。

【讨论】:

这个答案可能应该是对您原始问题的评论。

以上是关于Python:嵌套的while循环将从第一个while开始“继续”,而不是嵌套的while的主要内容,如果未能解决你的问题,请参考以下文章

Python打破嵌套的for循环并重新启动while循环

一文了解Python中的循环(for while break continue 嵌套循环...)

理解python中嵌套while循环中的概念的问题

python-day02 while嵌套循环

python第十三课——嵌套循环

Python中的嵌套循环