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

时间:2017-08-11 07:59:58

标签: python loops exception

设置向上

我有一个网址列表,每个网址都包含一个表单。我使用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。这很好。

问题

我偶尔会收到其中一个网址的意外错误。例如,错误来自该特定URL没有特定字段。

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

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

有没有办法告诉Python从url重启循环导致错误,而不是从列表中的第一个url?

4 个答案:

答案 0 :(得分:1)

而不是告诉python从那一点开始,而是使用'try''除了'。这将简单地跳过破坏循环的URL,并继续循环直到它遍历所有URL。您还可以包含一个print语句来标识哪个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

答案 1 :(得分:0)

您可以使用<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> while

假设您的函数返回try/except

True

然后你可以重试直到它成功。

核心思想是你不需要重新启动当前for循环,但你可以将你的函数包装在内部while循环中。

答案 2 :(得分:0)

您可以在代码的异常句柄部分使用continue

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

答案 3 :(得分:0)

我猜你正在调试你的代码,你需要从错误输出网址运行你的代码。 因为每个建议的try except块都可以用来处理错误。但是出于调试目的,下面是调整

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

您可以从错误输出网址调试代码,而不是从列表的开头调试。

相关问题