ash*_*tch 10 python exception python-c-api
如果我这样做(例如)
open("/snafu/fnord")
Run Code Online (Sandbox Code Playgroud)
在Python中(并且该文件不存在),我得到一个追溯和消息
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
Run Code Online (Sandbox Code Playgroud)
我想用Python的C API获取上面的字符串(即嵌入在C程序中的Python解释器).我需要它作为一个字符串,而不是输出到控制台.
随着PyErr_Fetch()我可以得到异常和值的类型对象.对于上面的示例,值是一个元组:
(2, 'No such file or directory', '/snafu/fnord')
Run Code Online (Sandbox Code Playgroud)
从我获得的信息PyErr_Fetch()到Python解释器显示的字符串有一个简单的方法吗?(不涉及为每个异常类型自己构造这样的字符串.)
我认为通过在异常实例上运行"str()"来打印Python异常,它将返回您感兴趣的格式化字符串.您可以通过调用PyObject_Str()此处描述的方法从C中获取此异常:
https://docs.python.org/c-api/object.html
祝好运!
更新:我有点困惑为什么返回给你的第二个元素PyErr_Fetch()是一个字符串.我的猜测是你收到了一个"非标准化的异常",并且需要调用PyErr_NormalizeException()将该元组转换成一个"真正的"异常,它可以将自己格式化为你想要的字符串.