pybind11 相当于 boost::python::extract?

pybind11 equivalent of boost::python::extract?

我正在考虑将复杂代码从 boost::python 移植到 pybind11,但我对缺少 boost::python::extract<...>().check() 之类的东西感到困惑。我读到 pybind11::cast<T> 可用于从 py::object 中提取 c++ 对象,但检查转换是否可行的唯一方法是调用它并在转换失败时捕获异常。有什么我忽略的吗?

isinstance 将完成工作 (doc) :

namespace py = pybind11;
py::object  obj =  ...
if (py::isinstance<py::array_t<double>>(obj))
{
    ....
} 
else if (py::isinstance<py::str>(obj))
{
   std::string val = obj.cast<std::string>();
   std::cout << val  << std::endl;
} 
else if (py::isinstance<py::list>(obj))  
{
   ...
}