Python C API:如何获取异常的字符串表示?
如果我在Python中执行(例如)
open("/snafu/fnord")
而这个文件不存在,我会收到一个错误追踪信息和一条消息
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
我想通过Python的C接口获取上面的字符串(也就是说,在一个C程序中嵌入Python解释器)。我需要的是字符串,而不是输出到控制台。
通过PyErr_Fetch()
,我可以获取异常的类型对象和它的值。对于上面的例子,值是一个元组:
(2, 'No such file or directory', '/snafu/fnord')
有没有简单的方法可以从我通过PyErr_Fetch()
获得的信息中得到Python解释器显示的字符串?(一种不需要自己为每种异常类型构造这样的字符串的方法。)
1 个回答
9
我觉得Python中的异常是通过对异常实例运行“str()”函数来打印的,这样会返回你想要的格式化字符串。你可以通过在C语言中调用PyObject_Str()
这个方法来获取这个字符串,具体内容可以在这里找到:
https://docs.python.org/c-api/object.html
祝你好运!
更新:我有点困惑,为什么PyErr_Fetch()
返回的第二个元素是一个字符串。我的猜测是你得到了一个“未标准化的异常”,你需要调用PyErr_NormalizeException()
来把那个元组转换成一个“真正的”异常,这样它就可以像你想要的那样格式化成字符串。