<p>这里有两种可能性</p>
<p>首先,也许在<code>unavailable</code>中不应该有任何不在<code>icecream_flavours</code>中的东西,但是,由于程序中其他地方的一些bug,这是不正确的。在这种情况下,您将需要调试首先出错的地方,无论是在调试器下运行还是在代码中添加<code>print</code>调用。无论如何,由于问题很可能出现在您在这里没有向我们展示的代码中,因此如果这就是问题所在,我们也无能为力</p>
<p>或者,也许某些东西出现在<code>unavailable</code>中是完全合理的,即使它不在<code>icecream_flavours</code>中,在这种情况下,您只想忽略它</p>
<p>这很容易做到,你只需要编写代码就可以了。正如<a href="https://docs.python.org/3/library/stdtypes.html#mutable-sequence-types" rel="nofollow">^{<cd6>}</a>的文档所解释的,它:</p>
<blockquote>
<p>raises <code>ValueError</code> when <code>x</code> is not found in <code>s</code>.</p>
</blockquote>
<p>因此,如果要忽略在<code>icecream_flavours</code>中找不到<code>i</code>的情况,只需使用<code>try</code>/<code>except</code>:</p>
<pre><code>for i in unavailable:
try:
icecream_flavours.remove(i)
except ValueError:
# We already didn't have that one... which is fine
pass
</code></pre>
<hr/>
<p>也就是说,有更好的方法来组织代码</p>
<p>首先,使用正确的数据结构总是使事情变得更容易。假设你不想要重复的口味,而且口味的顺序并不重要,你真正想要的是集合,而不是列表。如果你有集合,这将是微不足道的:</p>
<pre><code>icecream_flavours -= unavailable
icecream_flavours |= new_flavours
</code></pre>
<p>即使你不能做到这一点,创建一个新的列表通常比在适当的地方修改列表要简单:</p>
<pre><code>icecream_flavours = [flavour for flavour in icecream_flavours
if flavour not in set(unavailable)]
</code></pre>
<p>(请注意,我将<code>unavailable</code>转换为一个集合,因此我们不必强制搜索列表中的每个味道。)</p>
<p>这些更改中的任何一个都会缩短代码,提高效率。但是,更重要的是,它们都使代码更容易推理,并且消除了出现错误的可能性,比如您正在尝试修复的错误</p>