簡體   English   中英

系統錯誤:<built-in function xxx_iterator> 返回帶有錯誤集的結果

[英]SystemError: <built-in function xxx_iterator> returned a result with an error set

我正在嘗試從 SWIG 2.0.11 和 Python 2.7.12 升級到 SWIG 3.0.12 和 Python 3.6,但是當我在任何迭代器(使用 %template 自動生成)上運行測試時出現以下異常:

SystemError: <built-in function xxx_iterator> returned a result with an error set

例如,即使是最簡單的迭代也會失敗:

Traceback (most recent call last):
File "testRender.py", line 459, in testRender
    for v in vertices:
File "ncore.py", line 90833, in __iter__
    return self.iterator()
File "ncore.py", line 90830, in iterator
    return _ncore.Vertices_iterator(self)
SystemError: <built-in function Vertices_iterator> returned a result with an error set

有任何想法嗎?

同樣,這一切在 SWIG 2.0.11 和 Python 2.7.12 上都非常有效......

編輯:添加更簡單的示例:

它可以是任何 %template-generated 迭代器,例如,在 .i 文件中定義的這個模板:

%template(Ints) std::list<int>;

使用這個簡單的代碼時會失敗:

intsList = ncore.Ints()
intsList.append(1)
intsList.append(2)
for i in intsList:
    print(i)

帶有與此類似的消息:

Traceback (most recent call last):
File "testRender.py", line 459, in testRender
    for i in intsList:
File "ncore.py", line 90833, in __iter__
    return self.iterator()
File "ncore.py", line 90830, in iterator
    return _ncore.Ints_iterator(self)
SystemError: <built-in function Ints_iterator> returned a result with an error set

這很奇怪,只是從頭開始重新編譯所有內容。 然后我測試了您的簡化示例(如果理解正確):

我的測試:

%module mytest                                                                                             
%{                                                                                                       
    #include <list>
     using namespace std;                                                                                     
%}                                                                                                       

%include "std_list.i"
namespace std {                                                                                          
    %template(Ints) list<int>;                                                           
}   

編譯步驟:

swig -Wall -c++ -python -py3 -o mytest_wrap.cpp mytest.i
g++ -c -g -ansi mytest_wrap.cpp -I/usr/local/include/python3.6m/ -fPIC -o mytest_wrap.o
g++ -g -ansi -o _mytest.so mytest_wrap.o -shared

然后,在將 mytest 模塊導入 python 后,一切都像魅力一樣。

測試配置:

  • dockerized Ubuntu16.04:Python 3.6.1、SWIG 3.0.12、g++ 5.4。
  • dockerized Centos6:Python 3.6.1、SWIG 3.0.12、g++(4.9.2 和 4.4.7)

雖然這是一個相對較舊的問題,但最近我在處理 CentOS7 docker 中的 SELinux 和 settools 時遇到了類似的問題( <built-in function delete_qpol_iterator_t> returned a result with an error set )。 源代碼構建和安裝 libsepol 和 libselinux 可能會解決問題。

所以我想更新相關的庫和其他依賴項可能會有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM