首页 > 解决方案 > 尝试后缩进,除了多个for循环python

问题描述

我正在使用 try 和除了缩进。在我尝试和除外代码之后我应该如何缩进。

例子:


    try: 
        for elem in 

    browser.find_elements_by_xpath('/html/body/form[2]/table/tbody/tr[1]/td[1]/select/option'):
            elem.click()
    except StaleElementReferenceException: 
        for elem in browser.find_elements_by_xpath('/html/body/form[2]/table/tbody/tr[1]/td[1]/select/option'):
            elem.click()
    for ele in browser.find_elements_by_xpath('/html/body/form[2]/table/tbody/tr[1]/td[2]/table/tbody/tr[1]/td[1]/select/option'):
        ele.click()

我正在使用“try and except”,因为我不断收到 StaleElementReferenceException 错误。唯一的事情是我需要在循环中多次使用 try 和 except 。

标签: python

解决方案


看来你做对了,在 except 之后的下一行应该在同一级别缩进。所以:

try:
    bla()
except X as y:
    foo()

bar()

请注意 bar 之前的附加空行,以使代码更具可读性。

此外,在 try 块中,您可以将调用 browser.find_elements_by_xpath 移动到之前的变量赋值中,这样可以使您的代码更具可读性。例如

all_options = browser.find_elements_by_xpath(
    '/html/body/form[2]/table/tbody/tr[1]/td[1]/select/option')
for option in all_options:
    option.click()

如果您想再尝试一次,除了将另一个循环包装在 except 中,您可以通过多种方式很好地做到这一点。我的建议是将循环包装在一个将异常“转换”为返回值的函数中:

def click_all_options(path):
    try:
        for option in browser.find_elements_by_xpath(path):
            option.click()
        return True
    except StaleElementReferenceException:
        return False

并在代码中:

select1 = '/html/body/form[2]/table/tbody/tr[1]/td[1]/select/option'
select2 = '/html/body/form[2]/table/tbody/tr[1]/td[2]/table/tbody/tr[1]/td[1]/select/option'
result = click_all_options(select1):
if not result:
    click_all_options(select2):

推荐阅读