簡體   English   中英

Python C API:如何獲取異常的字符串表示形式?

[英]Python C API: how to get string representation of exception?

如果我這樣做(例如)

 open("/snafu/fnord")

在 Python(並且文件不存在)中,我得到一個回溯和消息

 IOError: [Errno 2] No such file or directory: '/snafu/fnord'

我想用 Python 的 C API(即嵌入在 C 程序中的 Python 解釋器)獲取上述字符串。 我需要它作為一個字符串,而不是 output 到控制台。

使用PyErr_Fetch()我可以獲得異常的類型 object 和值。 對於上面的例子,值是一個元組:

 (2, 'No such file or directory', '/snafu/fnord')

從我從PyErr_Fetch()獲得的信息到 Python 解釋器顯示的字符串,是否有一種簡單的方法? (一個不涉及自己為每種異常類型構造此類字符串的方法。)

我認為 Python 異常是通過在異常實例上運行“str()”來打印的,它將返回您感興趣的格式化字符串。您可以通過調用此處描述的PyObject_Str()方法從 C 中獲取:

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

祝你好運!

更新:我有點困惑為什么PyErr_Fetch()返回給你的第二個元素是一個字符串。 我的猜測是您收到了一個“未規范化的異常”,需要調用PyErr_NormalizeException()將該元組轉換為一個“真正的”異常,它可以像您希望的那樣將自身格式化為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM