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