Доступ к обратной трассировке Python из C APIPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Доступ к обратной трассировке Python из C API

Сообщение Anonymous »

У меня возникли проблемы с поиском правильного способа выполнения обратной трассировки Python с использованием C API. Я пишу приложение, в которое встроен интерпретатор Python. Я хочу иметь возможность выполнять произвольный код Python и, если он вызывает исключение, преобразовать его в мое собственное исключение C++ для конкретного приложения. На данный момент достаточно извлечь только имя файла и номер строки, в которой возникло исключение Python. Вот что у меня есть на данный момент:

Код: Выделить всё

PyObject* pyresult = PyObject_CallObject(someCallablePythonObject, someArgs);
if (!pyresult)
{
PyObject* excType, *excValue, *excTraceback;
PyErr_Fetch(&excType, &excValue, &excTraceback);
PyErr_NormalizeException(&excType, &excValue, &excTraceback);

PyTracebackObject* traceback = (PyTracebackObject*)traceback;
// Advance to the last frame (python puts the most-recent call at the end)
while (traceback->tb_next != NULL)
traceback = traceback->tb_next;

// At this point I have access to the line number via traceback->tb_lineno,
// but where do I get the file name from?

// ...
}
Покопавшись в исходном коде Python, я увидел, что они получают доступ как к имени файла, так и к имени модуля текущего кадра через структуру _frame, которая выглядит так: является частной структурой. Моя следующая идея заключалась в том, чтобы программно загрузить модуль трассировки Python и вызвать его функции с помощью C API. Это разумно? Есть ли лучший способ получить доступ к обратной трассировке Python из C?

Подробнее здесь: https://stackoverflow.com/questions/179 ... -the-c-api
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»