[英]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
您可以使用一段while
並try/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.