12

如果我这样做(例如)

 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 解释器显示的字符串有没有简单的方法?(不涉及自己为每种异常类型构造此类字符串。)

4

1 回答 1

8

我认为 Python 异常是通过在异常实例上运行“str()”来打印的,这将返回您感兴趣的格式化字符串。您可以通过调用PyObject_Str()此处描述的方法从 C 中获取它:

https://docs.python.org/c-api/object.html

祝你好运!

更新:我有点困惑为什么返回给你的第二个元素PyErr_Fetch()是一个字符串。我的猜测是您收到了“非规范化异常”,需要调用PyErr_NormalizeException()以将该元组转换为“真实”异常,该异常可以将自己格式化为您想要的字符串。

于 2009-06-16T13:25:13.107 回答