如果我这样做(例如)

 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()来将该元组转换为“真实”元组。可以将自身格式化为字符串的异常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top