Как упростить конструкцию из нескольких try except в python
Столкнулся с проблемой, которая показана на скриншоте, можно ли как-то упростить конструкцию try-except?
try:
storage.driver.find_element(by=By.XPATH, value='первое значение').send_keys(text + storage.Keys.ENTER)
except:
try:
storage.driver.find_element(by=By.XPATH, value='второе значение').send_keys(text + storage.Keys.ENTER)
except:
try:
storage.driver.find_element(by=By.XPATH, value='третье значение').send_keys(text + storage.Keys.ENTER)
except:
try:
storage.driver.find_element(by=By.XPATH, value='четвертое значение').send_keys(text + storage.Keys.ENTER)
except:
try:
storage.driver.find_element(by=By.XPATH, value='пятое значение').send_keys(text + storage.Keys.ENTER)
except:
storage.driver.find_element(by=By.XPATH, value='шестое значение').send_keys(text + storage.Keys.ENTER)
Ответы (2 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Не надо строить логику на каскадах ошибок. Плохая идея. Поменяйте find_element на find_elements, перебирайте значения в цикле, выходите из функции при первом найденом элементе:
def send_text_to_first_element(values, text):
for v in values:
for e in storage.driver.find_elements(by=By.XPATH, value=v):
e.send_keys(text + storage.Keys.ENTER)
return
values = (
'первое значение',
'второе значение',
'третье значение',
'четвертое значение',
'пятое значение',
'шестое значение'
)
send_text_to_first_element(values, text)
Автор решения: Pavel.img
→ Ссылка
def func(attempts_counter):
try:
# код здесь
except:
func(attempts_counter + 1)
Попробуйте так