3

我开发了一个交互式数据分析工具,其中 C++ 高性能内核通过 Cython 进行包装并作为 Python 对象公开。这与 IPython 结合使用非常好。但是,扩展模块的本地代码崩溃(例如分段错误)也会导致解释器崩溃,从而丢失整个会话。有没有可能以任何方式避免这种情况?像分段错误这样的错误会被捕获为适当的 Python 异常吗?

4

2 回答 2

1

faulthandler模块(3.3 中新增,但用于旧版本)可以打印系统级错误的回溯。

试图处理 Python 代码中的错误显然是行不通的。在 C 级别,您可以为 SIGSEGV 安装信号处理程序,但从我能找到的信息来看,您可以在那里做的事情非常有限。基本信息似乎是您可以正常关闭,但无法从段错误中恢复。

于 2013-11-04T18:10:06.627 回答
0

让我补充一点,通过 Cython 重新引发 C++ 标准异常可以避免许多崩溃。这是通过附加except +到 Cython 类定义来完成的。例子:

cdef extern from "../src/Example.h":
    cdef cppclass Example:
        void method() except +
于 2013-11-15T08:26:13.323 回答