Python C API: как получить строковое представление исключения?

Если я делаю (например).

 open("/snafu/fnord")

в Python (и файл не существует), я получаю traceback и сообщение

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

Я хотел бы получить вышеупомянутую строку с API Python C (т.е. интерпретатор Python, встроенный в программу C). Мне нужен он как строка, не вывод к консоли.

С PyErr_Fetch() Я могу получить текстовый объект исключения и значения. Для вышеупомянутого примера значение является кортежем:

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

Есть ли простой способ от информации, от которой я получаю PyErr_Fetch() к строке шоу интерпретатора Python? (Тот, который не включает для построения таких строк для каждого типа исключительной ситуации самостоятельно.)

10
задан Amro 19 August 2012 в 22:26
поделиться

1 ответ

Я думаю, что исключения Python печатаются путем запуска "str ()" в экземпляре исключения, который вернет интересующую вас отформатированную строку. Вы можете получить это из C, вызвав Метод PyObject_Str () , описанный здесь:

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

Удачи!

Обновление: Я немного запутался, почему второй элемент, возвращаемый вам PyErr_Fetch () , является строкой. Я предполагаю, что вы получаете «ненормализованное исключение» и вам нужно вызвать PyErr_NormalizeException () , чтобы превратить этот кортеж в «настоящее» исключение, которое может отформатировать себя как строку, как вы хотите.

]
7
ответ дан 4 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: