我正在for循环内运行带有for循环迭代的python代码,但是该代码正在运行,但是,如果引发异常,则要在异常下执行的代码没有执行,并且代码会在except中无限循环,而不会移动到主循环
以下错误消息:
selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
from unknown error: web view not found
(Session info: chrome=73.0.3683.86)
(Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 10.0.17763 x86_64)
我尝试过的代码:
for _ in range(100):
print("main loop pass")
for button in fb_buttons:
driver.switch_to.window(driver.window_handles[1])
try:
while like_right:
for right in like_right:
right.click()
break
driver.switch_to.window(driver.window_handles[0])
except (NoSuchWindowException, ElementNotVisibleException, StaleElementReferenceException) as e:
driver.switch_to.window(driver.window_handles[0])
continue
except StaleElementReferenceException as e:
time.sleep(10)
refresh.click()
else:
time.sleep(5)
refresh.click()
print("refreshed")
Google搜索/文档没有任何内容...让我感到奇怪的是,Selenium可以很好地抛出异常但无法捕获它。
答案 0 :(得分:1)
下面的break
导致以下行无法访问:
break
driver.switch_to.window(driver.window_handles[0]) # <--- unreachable
这是您可能要用的一个小例子,请注意,此代码将引发:
sequence = ['first', 'second', 'third']
def run_after_type_error_exception():
print("runs after type error")
def run_after_index_error_exception():
print("runs after index error")
在没有break
的情况下,此代码将在第一次迭代中捕获这两个异常。在这里,您还有一个for-else
块。请注意,在第三次迭代之后,此代码将Do something else
。
for iteration in range(5):
for element in sequence:
try:
while sequence:
for character in element:
sequence.pop()
sequence[1].split() + 1
except (NameError, TypeError, ValueError) as e:
print(f"Caught first exception: {e}")
run_after_type_error_exception()
# break
except IndexError as e:
print(f"Caught exception {e}")
run_after_index_error_exception()
# break
else:
print("Do something else")
print(f"Current iteration: {iteration}")
另外,请注意time.sleep(is_in_seconds)
,因此,如果您的代码与上述代码的行为类似(在一半时间的else
部分中,则您将sleep
至少持续约4分钟 ...