try后缩进,在多个for循环中除外python

  • 本文关键字:循环 python for 缩进 try python
  • 更新时间 :
  • 英文 :


我使用的是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):

最新更新