我正在将Python嵌入C++的dll中(最终可以将其放入xll中)。当设置错误时,Py_Initialize被记录为终止失败-请参见http://docs.python.org/c-api/init.html,“...如果初始化失败,则是致命错误。”。
是否有可能捕获此错误?如何操作?
考虑使用全局Windows钩子?
我正在将Python嵌入C++的dll中(最终可以将其放入xll中)。当设置错误时,Py_Initialize被记录为终止失败-请参见http://docs.python.org/c-api/init.html,“...如果初始化失败,则是致命错误。”。
是否有可能捕获此错误?如何操作?
考虑使用全局Windows钩子?
我通过创建一个单独的可执行文件来尝试初始化Python,解决了这个问题。我的主进程将启动它并检查退出代码,只有在子进程成功时才调用PyInitialize。因此,Python被初始化两次,但比对用户造成的明显崩溃要好。
Py_FatalError
将会导致致命错误,该函数会输出一条解释性信息并调用abort()
结束程序。目前来看,Jason的解决方案似乎是唯一的方法,但这并没有涵盖Python由于稍后某处发生致命错误而失败的情况,因此嵌入式应用程序无法以更优雅的方式处理它(显示GUI消息然后终止)。
我已经在Python错误跟踪器中创建了一个补丁和问题,并交叉引用了这个问题:http://bugs.python.org/issue30560