Python 语法错误的异常文本(boost库)
我有一段代码片段(整个程序可以正确编译和链接):
...
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);
...
}
这个程序试图执行的文件有语法错误,所以抛出了一个异常。当程序尝试获取错误信息时就崩溃了……
这段代码在运行时错误时表现良好,但在语法错误时却不知为何崩溃了。
我该如何获取这类错误的错误信息呢?
提前谢谢你!
1 个回答
5
根据PyErr_Fetch的文档,即使类型对象不为NULL,值和回溯对象也可能是NULL。在尝试提取值之前,你应该先检查pvalue是否为NULL。
std::string error;
if(pvalue != NULL) {
error = boost::python::extract<std::string>(pvalue);
}
如果你想检查这个异常是否是语法错误,可以将ptype与这里列出的异常类型进行比较。
如果要更具体地回答,我需要从崩溃的地方获取回溯信息。
编辑
pvalue是一个异常对象,而不是字符串实例,所以你应该使用PyObject_Str来获取异常的字符串表示。
你可能需要先调用PyErr_NormalizeException,将pvalue转换为正确的异常类型。