gpt4 book ai didi

python - 在boost python中评估无对象

转载 作者:太空狗 更新时间:2023-10-30 03:05:06 26 4
gpt4 key购买 nike

我正在将一个(大部分) float 列表传递给 boost python 中的一个模块,一些元素是 None 对象。在 C++ 代码中,我像这样提取 float :

for(i=0;i<boost::python::len(list) - window_len + 1;i++) {
double value = boost::python::extract<double>(list[i]);
}

当 list[i] 指向一个 python None 对象时,这显然是有问题的。因此,我写了这样的东西:

for(i=0;i<boost::python::len(list) - window_len + 1;i++) {
if(list[i] == NULL) continue;
double value = boost::python::extract<double>(list[i]);
}

for(i=0;i<boost::python::len(list) - window_len + 1;i++) {
if(list[i] == boost::python::api::object()) continue;
double value = boost::python::extract<double>(list[i]);
}

因为显然 boost::python::api::object() 的计算结果为 None。但是,这些都不起作用。我如何检查 python None 对象中的列表[i]?

最佳答案

boost::python::api::object() 相比,您的最后一种方法应该可行。但是,它只检查元素是否实际上是 None。如果值既不是 None 也不是数字类型(例如字符串),提取仍然会失败。

您应该使用 check() 来确保转换成功(如果失败,如果您仍然使用该值,模块将抛出异常):

for( size_t i=0, len=boost::python::len(list); i<len; ++i ) {
boost::python::extract<double> value(list[i]);
if( !value.check() ) continue; // check if the conversion was successful
double d = value; // now you can use value as double
}

关于python - 在boost python中评估无对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13461113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com