我使用的是try-and-except缩进。在尝试和排除代码后,我应该如何缩进。
示例:
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-exception",因为我一直收到StaleElementReferenceException的错误。唯一的问题是,我需要在循环中多次使用try-and-except。
看起来你做得对,except后面的下一行应该缩进到同一级别。因此:
try:
bla()
except X as y:
foo()
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):