gpt4 book ai didi

c++ - 关于语法错误的 Python 异常文本(boost 库)

转载 作者:行者123 更新时间:2023-11-30 02:09:52 24 4
gpt4 key购买 nike

我有这段代码 snnipet(整个程序编译和链接正确):

...
try
{
boost::python::exec_file(
"myscript.py", // this file contains a syntax error
my_main_namespace,
my_local_namespace
);
return true;
}
catch(const boost::python::error_already_set &)
{
PyObject *ptype, *pvalue, *ptraceback;
PyErr_Fetch(&ptype, &pvalue, &ptraceback);

// the next line crashes on syntax error
std::string error = boost::python::extract<std::string>(pvalue);
...
}

程序试图执行的文件有语法错误,因此抛出异常。当程序试图获取错误信息时崩溃...

该代码可以很好地处理运行时错误,但不知何故会因语法错误而崩溃。

如何获取带有此类错误的错误字符串?

提前致谢

最佳答案

来自documentation of PyErr_Fetch :“即使类型对象不是,值和回溯对象也可能为 NULL”。在尝试提取值之前,您应该检查 pvalue 是否为 NULL。

std::string error;
if(pvalue != NULL) {
error = boost::python::extract<std::string>(pvalue);
}

如果您想检查异常是否是 SyntaxError,您可以将 ptype 与列出的异常类型进行比较 here .

为了更具体地回答,我需要从它崩溃的地方开始回溯。

编辑

pvalue 是一个异常对象,而不是一个 str 实例,所以你应该使用 PyObject_Str获取异常的字符串表示形式。

您可能需要调用 PyErr_NormalizeException首先将 pvalue 转换为正确的异常类型。

关于c++ - 关于语法错误的 Python 异常文本(boost 库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5026597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com