2017-08-11 59 views
0

建立意外的错误处理

我的网址均含有一组形式的名单后,在错误的项目继续进行循环。我使用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?

+0

你试过'尝试除了别的吗? – otayeby

回答

1

而不必告诉Python从该点开始,而使用“尝试”“除”的。这将简单地跳过破坏你的循环的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 
0

您可以使用whiletry/except

假设你的函数返回True

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

然后,你可以重新尝试,直到成功。

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

+0

对,对不起。 – Sraw

+0

不需要道歉。只是让你知道 ;-) –

0

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

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

如果使用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 
0

我猜你正在调试你的代码,你需要在你的代码从错误输出网址。 每个建议的tryexcept块可用于处理错误。要不是你调试的目的,下面是调整

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调试你的代码,而不是从列表的开始。