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

幸運を!

更新:返される2番目の要素が文字列である理由が少し混乱してPyErr_Fetch()います。私の推測では、「正規化されていない例外」を受け取っており、PyErr_NormalizeException()そのタプルを「実際の」例外に変換するために呼び出す必要があります。この例外は、希望どおりに文字列としてフォーマットできます。

于 2009-06-16T13:25:13.107 に答える