繁体   English   中英

意外错误处理后,继续在错误项处循环

[英]Continue for loop at error item after unexpected error handling

设定

我有一个URL列表,每个URL都包含一个表单。 我使用Selenium填写表格,然后遍历网址。

for url in urls:
     browser = webdriver.Chrome()
     browser.implicitly_wait(30)
     browser.get(url)

     data = {} # dictionary containing variables to be inserted in the url's form

     var1 = browser.find_element_by_id("id")
     var1.clear()
     var1.send_keys(data['var1'])

     # here follow more variables to be inserted

其中urls = [] # list containing all urls 这很好。


问题

我时不时地收到其中一个网址的意外错误。 例如,该错误是由于该特定网址没有特定字段而导致的。

我调整代码以能够处理缺少该特定字段的所有网址。 一切顺利。

但是,我需要从头开始重新启动循环-效率不高。

有没有办法告诉Python从导致错误的URL(而不是列表中的第一个URL)重新开始循环?

不必告诉python从这一点开始,而是使用'try''except'。 这将简单地跳过破坏循环的URL,并继续直到循环遍历所有URL。 您还可以添加打印语句,以识别哪个网址无效,然后再返回该网址

所以,

try:
     for url in urls:
         browser = webdriver.Chrome()
         browser.implicitly_wait(30)
         browser.get(url)

         data = {} # dictionary containing variables to be inserted in the url's form

         var1 = browser.find_element_by_id("id")
         var1.clear()
         var1.send_keys(data['var1'])
except Exception as e:
     print(url)
     print('Exception:',e)  
     pass

您可以使用一段whiletry/except

假设您的函数返回True

for url in urls:
    success = False
    while not success:
        try:
            data, success = your_function()
        except:
            success = False

然后,您可以重试直到成功。

核心思想是您不需要重新启动电流循环,而是可以将函数包装在内部while循环中。

您可以使用continue在代码中的异常处理部分。

for url in urls:
    try:
        code may have exception
    except:
        continue

如果您使用try except else ,则可能如下所示:

for url in urls:
    browser = webdriver.Chrome()
    browser.implicitly_wait(30)
    browser.get(url)

    data = {} # dictionary containing variables to be inserted in the url's form

    try:
        var1 = browser.find_element_by_id("id")
        var1.clear()
        var1.send_keys(data['var1'])
    except Exception, exception:
        print exception # will print the error but ignore the lines of the else statement
        # or do something about the error
    else:
        print 'went well'
        # here follow more variables to be inserted
        # or continue your code

我猜您正在调试代码,并且需要从错误URL中运行代码。 因为每一个建议的try except block都可以用来处理错误。 但出于调试目的,以下是一些调整

i = 0 # for first time. next time you can assign it to index of error generating url
while i < len(urls):
    try:
        url = urls(i)
        browser = webdriver.Chrome()
        browser.implicitly_wait(30)
        browser.get(url)

        data = {} # dictionary containing variables to be inserted in      the url's form

        var1 = browser.find_element_by_id("id")
        var1.clear()
        var1.send_keys(data['var1'])
    except:
        print i
        raise

您可以从错误的url而不是列表的开头调试代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM