使用 pybind 从 python 调用 c++ 函数,但 python 解释器不断崩溃

问题描述 投票:0回答:1

我正在尝试使用 pybind11 从 python 调用 C++ 函数。当直接运行时,该函数编译并运行得非常好。但是当我通过 python 调用它时,python 解释器只是崩溃,没有错误输出。

我尝试测试捕获运行时错误的方法(尝试捕获、调试器、打印语句等),但所有这些都无济于事,我无法获得任何额外的输出。不太确定是什么导致了这个问题,因为该功能已被确认可以自行工作。

一个运行时错误的示例,我不会得到任何输出。因此,对于导致相同结果(python 解释器崩溃)的不同函数,我如何知道根本原因?
C++:

void runtime_check() {
    try {
        int denom = 0;
        cout << 1 / denom << endl;
    }
    catch (const exception& e) {
        cout << e.what() << endl;
    }
}

PYBIND11_MODULE(pybind_test, m)
{
    m.def("runtime_check", &runtime_check);
}

Python:

import pybind_test as m
print("before")
try:
    m.runtime_check()
except RuntimeError as e:
    print(f"Caught exception in Python: {str(e)}")
print("after")

输出:
运行:python script.py
输出:
之前
(“after”没有出现,程序就结束了)

python c++ runtime pybind11
1个回答
0
投票

与Python相反,在C++中,整数除以零是未定义的行为。因此你的 C++ 代码会偶然运行。这是不正确的。这是带有 UB sanitizer 的相同 C++ 代码 enabled

只需将 C++ 函数实现更改为正确即可,一切都会正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.