#c #python #c
#c #python #c
Вопрос:
Я встраиваю python в C dll (так что в конечном итоге я могу поместить его в xll). При неправильной настройке Py_Initialize документируется как окончательный сбой — см. http://docs.python.org/c-api/init.html , «… это фатальная ошибка, если инициализация завершается неудачно»..
Возможно ли перехватить эту ошибку и как?
Подумав, может быть, глобальный перехват Windows?
Ответ №1:
Я решил это, создав отдельный исполняемый файл, который пытается инициализировать python. Мой основной процесс запустит его и проверит код выхода и вызовет PyInitialize только в том случае, если дочерний процесс прошел успешно. Итак, python инициализируется дважды, но это лучше, чем очевидный сбой для пользователя.
Ответ №2:
Фатальная ошибка вызывается вызовом Py_FatalError
, который прощается с пояснительным сообщением, а затем вызывает abort()
.
Комментарии:
1. Это нехорошо, не так ли? Я добавил обработчик сигналов для SIGABRT, обработчик выхода и обработчик выхода, и, к сожалению, ни один из них не срабатывает.
Ответ №3:
На данный момент решение Jason кажется единственным способом, но это не распространяется на случаи, когда Python выходит из строя из-за неустранимой ошибки где-то позже Py_Initialize()
, поэтому приложение для встраивания не может обработать его более изящным способом (показать сообщение GUI и только затем прервать).
Я создал исправление и проблему в Python bug tracker, перекрестно ссылаясь на этот вопрос: http://bugs.python.org/issue30560