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()
によって2番目の要素が返される理由が少し混乱しています。私の推測では、「正規化されていない例外」が発生しています。 PyErr_NormalizeException()
を呼び出して、そのタプルを" real"に変換する必要があります。希望どおりの文字列として自分自身をフォーマットできる例外。
所属していません StackOverflow