<p>不要试图在<code>elif</code>中完成整个循环,而是在需要时从列表中获取下一个值</p>
<p>有两种方法可以做到这一点:</p>
<p><strong>按列表索引。</strong></p>
<p>使用索引变量(此处<code>i</code>)跟踪您在列表中到达的位置:</p>
<pre><code>distinct = []
distinctvalue = driver.find_elements_by_xpath("My XPath has list of items")
i = 0 # <== initialise the index variable
for x in category:
if x == 'Constant':
distinct.append('None')
elif x == 'Categorical':
dv = distinctvalue[i] # <== use the index variable to look up next value
i += 1 # <== increment the counter ready for next time
distval = dv.text
distinct.append(distval)
print(distinct)
</code></pre>
<p>如果您可能提前用完了不同的值,那么您可以为此设置一个捕获,这样,如果它尝试获取下一个值,但没有,那么它将从循环中<code>break</code>替换:</p>
<pre><code> dv = distinctvalue[i]
</code></pre>
<p>与:</p>
<pre><code> try:
dv = distinctvalue[i]
except IndexError:
break
</code></pre>
<p><strong>使用迭代器。</strong></p>
<p>这次我们使用<code>iter</code>从列表中生成一个迭代器,并使用<code>next</code>从该迭代器中获取下一个值:</p>
<pre><code>distinct = []
distinctvalue = iter(driver.find_elements_by_xpath("My XPath has list of items")) # <== get the iterator
for x in category:
if x == 'Constant':
distinct.append('None')
elif x == 'Categorical':
dv = next(distinctvalue) # <== next one
distval = dv.text
distinct.append(distval)
print(distinct)
</code></pre>
<p>这一次,要在值用完时尽早退出循环,您需要替换:</p>
<pre><code> dv = next(distinctvalue)
</code></pre>
<p>与:</p>
<pre><code> try:
dv = next(distinctvalue)
except StopIteration:
break
</code></pre>