Python - следующий цикл for try - PullRequest
0 голосов
/ 24 июня 2018

У меня есть цикл for, который перебирает список URL-адресов. URL-адреса затем загружаются драйвером Chrome. Некоторые URL-адреса загрузят страницу в «плохом» формате и не пройдут первый тест xpath. Если это так, я хочу, чтобы он вернулся к следующему элементу в цикле. Мой код очистки работает, но я не могу заставить его перейти к следующему элементу цикла for. У меня есть исключение, которое закрывает мой веб-браузер, но ничего, что я пробовал, не заставило бы меня вернуться к 'for row in mysql_cats'

for row in mysql_cats : 
   print ('Here is the url -', row[1])
   cat_url=(row[1])
   driver = webdriver.Chrome()
   driver.get(cat_url); #Download the URL passed from mysql

   try:   
      CategoryName= driver.find_element_by_xpath('//h1[@class="categoryL3"]|//h1[@class="categoryL4"]').text   #finds either L3 or L4 catagory 
   except:
      driver.close()
      #this does close the webriver okay if it can't find the xpath, but not I cant get code here to get it to go to the next row in mysql_cats

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Я надеюсь, что вы закрываете драйвер в конце этого кода также, если не возникает никаких исключений.
Если вы хотите начать с начала цикла при возникновении исключения, вы можете добавить continue, как предлагалось в других ответах:

try:   
    CategoryName=driver.find_element_by_xpath('//h1[@class="categoryL3"]|//h1[@class="categoryL4"]').text   #finds either L3 or L4 catagory 
except NoSuchElementException:
    driver.close()
    continue # jumps at the beginning of the for loop

, поскольку я не знаю ваш код, следующий совет может оказаться бесполезным, но распространенным способом решения этих случаев является предложение try/except/finally:

for row in mysql_cats : 
    print ('Here is the url -', row[1])
    cat_url=(row[1])
    driver = webdriver.Chrome()
    driver.get(cat_url); #Download the URL passed from mysql
    try:
        # my code, with dangerous stuff
    except NoSuchElementException:
        # handling of 'NoSuchElementException'. no need to 'continue'
    except SomeOtherUglyException:
        # handling of 'SomeOtherUglyException'
    finally: # Code that is ALWAYS executed, with or without exceptions
        driver.close()

Я также предполагаю, что вы каждый раз по какой-то причине создаете новые драйверы.Если это не является добровольным, вы можете использовать что-то вроде этого:

driver = webdriver.Chrome()
for row in mysql_cats : 
    print ('Here is the url -', row[1])
    cat_url=(row[1])
    driver.get(cat_url); #Download the URL passed from mysql
    try:
        # my code, with dangerous stuff
    except NoSuchElementException:
        # handling of 'NoSuchElementException'. no need to 'continue'
    except SomeOtherUglyException:
        # handling of 'SomeOtherUglyException'
driver.close()

Таким образом, у вас есть только один драйвер, который управляет всеми страницами, которые вы пытаетесь открыть в цикле for

посмотрите где-нибудь о том, как try/except/finally действительно полезен при работе с соединениями и драйверами.
В качестве примечания, я бы хотел, чтобы вы заметили, как в коде я всегдаукажите, какое исключение я ожидаю: перехват всех исключений может быть опасным .Кстати, вероятно, никто не умрет, если вы просто используете except:

0 голосов
/ 24 июня 2018

Добавьте продолжить к своему заявлению кроме. Команда продолжения перемещает вас к следующему циклу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...