擅长:python、mysql、java
<p>新建议</p>
<p>我认为您正在用一个插件替换<code>plugins</code>列表(这是不可编辑的)</p>
<ul>
<li>你说你正在运行<code>plugins = plugins[1]</code>,这将用第二个插件替换iterable插件,使得<code>for plugin in plugins</code>失败</li>
<li>错误提示<code>for plugin in plugins</code>失败,因为<code>ElasticSearchDisponibilityAlert</code>不可iterable,但这是原始列表中第二个插件的类型,使得这种情况更为可能。你知道吗</li>
</ul>
<p>关于可转位和可转位类的旧建议:</p>
<p><code>ElasticSearchDisponibilityAlert</code>类可能是iterable,但没有实现<a href="https://docs.python.org/2/reference/datamodel.html#object.__getitem__" rel="nofollow">^{<cd7>}</a>。你知道吗</p>
<p>您可以定义它,从而支持按索引查找,如果您在内部有一个可索引的数据结构(例如列表),这将很容易:</p>
<pre><code>def __getitem__(self, key):
return self._internal_list_of_plugins[key]
</code></pre>
<p>或者使用<a href="https://docs.python.org/2.7/library/itertools.html#itertools.islice" rel="nofollow">itertools.islice</a>遍历插件并选择一个,这会使每次查找的效率大大降低,即O(n=len(plugins))而不是O(1)。你知道吗</p>
<pre><code># Grab the 2nd plugin at index 1
i = 1
plugin = itertools.islice(plugins, i, i+1).next()
</code></pre>