如何捕获并处理在 C 中调用 Py_Initialize() 时发生的致命错误

问题描述 投票:0回答:1

我将 Python 嵌入到 C 中,在代码的开头我有如下所示的内容。一切正常,直到用户意外删除了 python33 文件夹。这会导致 Py_Initialize() 抛出致命错误,显示“致命的 Python 错误:Py_Initialize:无法加载文件系统编解码器”然后我的应用程序崩溃了。我尝试使用 try{}catch(...) 来捕获此类错误,但似乎不起作用。我想知道是否有什么方法可以优雅地抓住并处理它。

try
{
    if(!Py_IsInitialized())
    {
        Py_Initialize();
    }
}
catch(...)
{
    std::out << "Can't initialized Python" << std::endl;
    return;
}
python c++ exception
1个回答
0
投票

首先,这是C++,不是C,其次,在Py_Initialize中,当发生致命错误时,线程的终止既不是调用try/catch,也不是调用__try/__ except,它们无法捕获它。 我建议尝试这个初始化选项:

PyConfig_InitPythonConfig(&config); // or PyConfig_InitIsolatedConfig
auto pythonPath = L"%localappdata%\\Programs\\Python\\Python38\\python.exe";
PyStatus status = PyConfig_SetString(&config, &config.executable, pythonPath);
if (PyStatus_Exception(status)) 
{
    // LogPythonError(L"PyConfig_SetString failed");
    PyConfig_Clear(&config);
    return false;
}
status = Py_InitializeFromConfig(&config);
if (PyStatus_Exception(status)) 
{
    // LogPythonError(L"Python initialization failed");
    PyConfig_Clear(&config);
    return false;
}
PyConfig_Clear(&config);
© www.soinside.com 2019 - 2024. All rights reserved.