当Py_initialize失败时,如何捕获和处理致命错误?

6

我正在将Python嵌入C++的dll中(最终可以将其放入xll中)。当设置错误时,Py_Initialize被记录为终止失败-请参见http://docs.python.org/c-api/init.html,“...如果初始化失败,则是致命错误。”。

是否有可能捕获此错误?如何操作?

考虑使用全局Windows钩子?

3个回答

3

我通过创建一个单独的可执行文件来尝试初始化Python,解决了这个问题。我的主进程将启动它并检查退出代码,只有在子进程成功时才调用PyInitialize。因此,Python被初始化两次,但比对用户造成的明显崩溃要好。


3
调用Py_FatalError将会导致致命错误,该函数会输出一条解释性信息并调用abort()结束程序。

1
这不太好,是吧?我已经添加了一个SIGABRT信号处理程序、一个退出处理程序和一个退出处理程序,但不幸的是,它们都没有被触发。 - DangerMouse

1

目前来看,Jason的解决方案似乎是唯一的方法,但这并没有涵盖Python由于稍后某处发生致命错误而失败的情况,因此嵌入式应用程序无法以更优雅的方式处理它(显示GUI消息然后终止)。

我已经在Python错误跟踪器中创建了一个补丁和问题,并交叉引用了这个问题:http://bugs.python.org/issue30560


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接