For循环执行不正确

时间:2019-03-24 15:54:27

标签: python

我正在运行一个for循环,该循环需要运行100次。 for循环又具有if / else条件。在执行for循环时,if / else条件可以正常工作,并在else条件结束时停止,但不能在for循环中循环。我尝试了几种方法,但是无法使循环正常工作。

for loop in range(100):
    if not fb_buttons:
        refresh.click()
        print("refreshed")
    else:
        for button in fb_buttons:
            button.click()
            driver.implicitly_wait(3)
            driver.switch_to.window(driver.window_handles[1])
            time.sleep(3)
            driver.close()
            print("popup closed")
            driver.switch_to.window(driver.window_handles[0])
            continue

我希望循环能够运行100次,但是在运行一次之后它将停止。

1 个答案:

答案 0 :(得分:2)

如果fb_buttons恰好是一个迭代器(例如fb_buttons = reversed(buttonList)),则它到达末尾时,您的第一个测试if not fb_buttons:将返回False(因为迭代器对象存在),并且{ {1}}块将不处理任何项目(因为迭代器已到达末尾)。因此,该循环实际上将运行100次,但不会执行任何操作。

您可以通过在else:行之前添加fb_buttons = list(fb_buttons)来验证这一点。

您还可以对代码进行一些重组,以在if not fb_buttons循环上使用else:语句:

for button in fb_buttons:

如果您的for _ in range(100): for button in fb_buttons: button.click() driver.implicitly_wait(3) driver.switch_to.window(driver.window_handles[1]) time.sleep(3) driver.close() print("popup closed") driver.switch_to.window(driver.window_handles[0]) else: refresh.click() print("refreshed") 变量是迭代器,则除非通过refresh.click()重置fb_buttons,否则逻辑将仅通过fb_buttons循环一次。

BTW,循环末尾的fb_buttons指令无效。

此外,您可以在第一行中使用continue代替_loop

不必为不打算使用的值定义变量(这是@ alec935的注释所要表达的意思)。