Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Python不';t捕获在C+中引发的异常+;?_Python_C++_Exception_Python 3.x_Boost Python - Fatal编程技术网

为什么Python不';t捕获在C+中引发的异常+;?

为什么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

我试图在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
        // 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();