Python-接下来在for循环中尝试

时间:2018-06-24 20:18:14

标签: python for-loop

我有一个for循环,可以遍历URL列表。然后由chrome驱动程序加载网址。某些网址会加载“错误”格式的页面,并且将在第一次xpath测试中失败。如果是这样,我希望它返回到循环中的下一个元素。我的清理代码有效,但似乎无法将其转到for循环中的下一个元素。我有一个例外,它关闭了我的web浏览器,但是我没有尝试过所有方法,然后让我全部循环回'for 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 :(得分:2)

如果没有异常发生,我希望您也可以在此代码末尾关闭驱动程序。
如果要在引发异常时从循环的开头开始,则可以添加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循环中尝试打开的所有页面

浏览somewhere,了解try/except/finally在处理连接和驱动程序时如何真正有用。
作为一个脚注,我希望您注意到在代码中如何始终指定期望的异常:捕获所有异常can be dangerous。顺便说一句,如果您仅使用except:

,可能没有人会死

答案 1 :(得分:-1)

添加继续到您的except语句。 Continue命令将您移至下一个循环。