如何捕获并处理Py_initialize失败的致命错误?
我正在把Python嵌入到一个C++的动态链接库(dll)中(最终是为了能放到一个xll里)。当设置不正确时,Py_Initialize这个函数会被说明为会严重失败——你可以查看这个链接:http://docs.python.org/c-api/init.html,里面说“如果初始化失败,那就是一个致命错误。”
那么,有没有办法捕捉到这个错误呢?怎么做呢?
我在想,也许可以用一个全局的Windows钩子?
3 个回答
1
目前,Jason的解决方案似乎是唯一的方法,但这并不能处理在Py_Initialize()
之后,Python因为某个致命错误而失败的情况。因此,嵌入的应用程序无法以更优雅的方式来处理这个问题(比如先显示一个图形界面的消息,然后再中止程序)。
我在Python的错误追踪系统中创建了一个补丁和问题,并且提到了这个问题:http://bugs.python.org/issue30560
3
一个致命错误是通过调用 Py_FatalError
产生的,这个函数会给你发个告别信息,然后调用 abort()
来结束程序。
3
我通过创建一个单独的可执行文件来解决这个问题,这个文件会尝试初始化Python。我的主程序会启动这个可执行文件,并检查它的退出代码,只有在子进程成功的情况下才会调用PyInitialize。因此,虽然Python被初始化了两次,但这总比让用户看到明显的崩溃要好。