2009-06-16 33 views
8

如果我這樣做(例如)Python C API:如何獲取異常的字符串表示?

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解釋器顯示的信息的簡單方法? (一個不涉及構建這樣的字符串爲每種類型的異常你自己。)

回答

6

我認爲Python的異常是由印在例外情況下運行「STR()」,這將返回格式化字符串你有興趣中您可以通過撥打這裏所描述的方法PyObject_Str()由C得到這樣的:

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

祝你好運!

更新:我有點困惑爲什麼第二個元素被PyErr_Fetch()返回給你是一個字符串。我的猜測是,您收到了「非標準化例外」,並需要調用PyErr_NormalizeException()把這一解析成一個「真實」的例外,可以像你想讓它本身格式化爲一個字符串。

+0

的第二個參數是一個元組,而不是字符串。我已經調用PyErr_NormalizeException()。但是PyErr_Fetch()不返回一個異常對象,只返回異常類型。所以我必須自己創建異常對象,我猜?我將PyErr_Fetch()的第二個參數傳遞給構造函數? – ashcatch 2009-06-16 13:56:02

相關問題