簡體   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