擅长:python、mysql、java
<p>我在python2.6</em>中遇到了同样的问题,并通过@aphex reply解决了这个问题。
但我想避免任何魔术值,或额外的布尔值来传递列表末尾条件。果然,我的迭代器有一个<em>atEnd()</em>方法,它告诉我已经超过了列表的末尾。在</p>
<p>所以实际上,使用SWIG异常处理是相当容易的。我只需要添加以下魔法:</p>
<pre><code>%ignore MyStructIter::atEnd();
%except MyStructIter::next {
if( $self->list->atEnd() ) {
PyErr_SetString(PyExc_StopIteration,"End of list");
SWIG_fail;
}
$action
}
</code></pre>
<p>关键是,一旦超过列表末尾,snipet将完全跳过next()调用。在</p>
<p>如果你坚持你的习惯用法,它应该看起来像:</p>
^{pr2}$
<p><strong>python3.x</em>注意事项:</strong></p>
<p>您应该用神奇的“yu”前缀和后缀名来命名<em>next()</em>函数。一种选择是简单地添加:</p>
<pre><code>%rename(__next__) MyStructIter::next;
</code></pre>