如何处理boost.python参数错误?

时间:2014-01-09 23:09:23

标签: python c++ boost boost-python

我有一个python扩展函数

static void EXTrender_effect(EffectGlobals_t *effect_handle, 
                    std::string preset,
            bp::object dest, int xdim, int ydim)
{ ... }

我在我的boost.python扩展程序中像往常一样导出:

def("render_effect", EXTrender_effect);

当我从python(2.7)调用它时,我得到一个C ++异常boost::python::error_already_set。在Visual Studio中追踪它,我可以看到它来自boost::python::objects::function::argument_error。好吧,我有一个参数错误;我可能用错误的args来调用它。我想做的是在我的python扩展中打印或抛出一些合理的东西,这样我的扩展用户就会看到我知道的好消息潜伏在PyErr_Fetch中。 (我可以看到消息在boost.python argument_error代码中构建。)

但我无法理解error_already_set; boost.python在funcall周围做了这个。我无法在扩展代码中检查python错误,因为我的函数永远不会被调用(参数错误由boost.python检测)。最终发生的事情就是它无声地失败。

我可以连接什么,以便我(或我的用户)可以看到参数错误消息?理想情况下将它们转换为python异常?

这就是Win7,Python2.7。

0 个答案:

没有答案