[英]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.