我正在尝试升级: 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 ....
编辑:添加更简单的示例:
它可能是任何模板生成的迭代器,因此,例如,此模板在.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
答案 0 :(得分:0)
这很奇怪,只是从头开始重新编译。然后我测试了你的简化例子(如果理解正确的话):
Mytest.i:
%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后,一切都像魅力一样。
经过测试的配置:
答案 1 :(得分:0)
尽管这是一个相对较老的问题,但是最近我在CentOS7 docker中处理SELinux和setool时遇到了类似的问题(<built-in function delete_qpol_iterator_t> returned a result with an error set
)。从source code构建和安装libsepol和libselinux可能会解决问题。
所以我想更新相关的库和其他依赖项可能会有用。