设置向上
我有一个网址列表,每个网址都包含一个表单。我使用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 :(得分: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
您可以从错误输出网址调试代码,而不是从列表的开头调试。