我开发了一个交互式数据分析工具,其中C ++高性能内核通过Cython包装并作为Python对象公开。这与IPython一起使用效果非常好。但是,扩展模块的本机代码崩溃(例如,分段错误)也会使解释器崩溃,从而导致整个会话丢失。有可能以任何方式避免这种情况吗?像分段错误这样的错误是否可以被捕获为正确的Python异常?
答案 0 :(得分:1)
faulthandler module(3.3中的新增内容,但旧版本的available)可以打印系统级错误的追溯。
尝试处理Python代码apparently doesn't work中的错误。在C级,您可以为SIGSEGV安装一个信号处理程序,但是根据我能找到的信息,您可以在那里做的非常有限。基本消息似乎是你可以优雅地关闭,但你无法从段错误中恢复。
答案 1 :(得分:0)
让我补充一点,通过Cython重新引发C ++标准异常可以避免许多崩溃。这是通过将except +
附加到Cython类定义来完成的。例如:
cdef extern from "../src/Example.h":
cdef cppclass Example:
void method() except +