擅长:python、mysql、java
<p>问题在于如何分配列表。从<a href="https://docs.python.org/2/c-api/list.html" rel="nofollow">the documentation</a>到{<cd1>}:</p>
<blockquote>
<p>Note: If len is greater than zero, the returned list object’s items are set to NULL. Thus you cannot use abstract API functions such as <code>PySequence_SetItem()</code> or expose the object to Python code before setting all items to a real object with <code>PyList_SetItem()</code>.</p>
</blockquote>
<p>也就是说,它生成一个“<code>len</code>”空指针的列表,而不是生成一个带有预先分配空间的空列表。在</p>
<p>解决方案是:</p>
<ol>
<li>创建一个空列表(pass<code>len</code>0),并保持其余代码不变(使用<code>PyList_Append</code>),或者</li>
<li>分配一个大小的列表,并使用<code>PyList_SetItem</code>而不是append。如果您使用这种方法,请注意<code>PyList_setItem</code>窃取了一个引用(因此您必须<code>incref</code><code>handle</code>),并且您想要的列表长度只包括那些带有<code>getHandle()!=NULL</code>的对象。在</li>
</ol>