为什么Python不';t捕获在C+中引发的异常+;?
我试图在boost::Python中创建一个Python迭代器。所以我有一个函数为什么Python不';t捕获在C+中引发的异常+;?,python,c++,exception,python-3.x,boost-python,Python,C++,Exception,Python 3.x,Boost Python,我试图在boost::Python中创建一个Python迭代器。所以我有一个函数 PyObject *my_iterator_next(MyIterator *iter) { if (!iter->is_end()) { return *(*iter)++; } else { PyErr_SetNone(PyExc_StopIteration); // this doesn't work either
PyObject *my_iterator_next(MyIterator *iter) {
if (!iter->is_end()) {
return *(*iter)++;
}
else {
PyErr_SetNone(PyExc_StopIteration);
// this doesn't work either
// PyErr_SetString(PyExc_StopIteration, "end of collection");
return NULL;
}
}
在Python中:
// x is MyContainer([1, 2, 3])
for x in my_container:
print(x)
我得到:
1
2
3
NoneTraceback (most recent call last):
File "main.py", line 6, in <module>
print(x)
StopIteration: end of collection
此代码不打印任何内容,因此不会捕获任何类型的异常
为什么?设置Python异常后,必须通知Boost.Python如下:
throw_error_already_set();
参阅
如果底层迭代器是C++迭代器,那么它可能是值得使用的,因为它处理所有细微的细节(例如迭代器延长容器的寿命)。这说明了它的用法。throw_error_already_set();