Возбуждение исключения, если ошибка не возникает - PullRequest
0 голосов
/ 17 июня 2019

Я работаю с селеновым webdriver в python3.Когда драйвер достигает определенной страницы и если присутствует определенный элемент класса с классом shiftUp, я хочу напечатать ответ и остановить выполнение в этот момент.В настоящее время я делаю это следующим образом:

flag = 0
try:
    error_source_file = driver.find_element_by_class_name("shiftUp")
    flag = 1
except:
    pass
if flag:
    print("RESPONSE")
    sys.exit()

Я хочу правильный способ сделать это.

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Используйте предложение else:

try:
    error_source_file = driver.find_element_by_class_name("shiftUp")
except NoSuchElementException:
    pass
else:
    print("RESPONSE")
    sys.exit()

Он запускается для случаев, когда не возникает ошибка: https://docs.python.org/3/tutorial/errors.html#handling-exceptions:

Оператор try … except имеет необязательное предложение else , которое, если оно присутствует, должно следовать всем, кроме предложений. Это полезно для кода, который должен быть выполнен, если предложение try не вызывает исключение.

и

Использование предложения else лучше, чем добавление дополнительного кода к предложению try, потому что это позволяет избежать случайного перехвата исключения, которое не было вызвано кодом, защищаемым оператором try … except.

Я бы рекомендовал ловить только NoSuchElementException по той же причине: вы не хотите перехватывать ошибки, которые не собираетесь делать.

0 голосов
/ 17 июня 2019

Почему бы и нет:

try:
    error_source_file = driver.find_element_by_class_name("shiftUp")
    print("RESPONSE")
    sys.exit()
except NoSuchElementException:
    pass

Строки после error_source_file не будут выполняться, если метод find_element вызывает исключение.

Примечание: рассмотрите возможность уточнения типа исключения, которое вы хотите перехватить (например: except IndexError:), или вы можете молчать об ошибках, что действительно плохо.

...