Что вызывает это исключение Python? - PullRequest
2 голосов
/ 25 октября 2009

У меня есть приложение C ++, которое использует Python для загрузки некоторых скриптов. Он вызывает некоторые функции в сценариях, и все работает нормально, пока приложение не завершится и не вызовет Py_Finalize. Затем отображается следующее: (GetName - функция в одном из сценариев)

Исключительная ситуация AttributeError: у объекта «module» нет атрибута «GetName» в «сборке мусора», игнорируется Неустранимая ошибка Python: непредвиденное исключение при сборке мусора

Затем приложение вылетает. Я использую Python 3.1 на Windows. Любой совет будет оценен.

1 Ответ

4 голосов
/ 25 октября 2009

Из документов в Py_Finalize ():

Ошибки и предостережения: уничтожение модули и объекты в модулях сделано в случайном порядке; это может привести к деструкторы (__del__() методы) для потерпеть неудачу, когда они зависят от других объектов (даже функции) или модули. Динамически загружаемые модули расширения загруженные Python не выгружаются. Небольшие объемы памяти выделяются интерпретатор Python не может быть освобожден (если вы обнаружили утечку, пожалуйста, доложите об этом). Память связана по кругу ссылки между объектами не освобождена. Некоторая память выделена Модули расширения не могут быть освобождены. Некоторые расширения могут работать некорректно если их процедура инициализации звонили не раз; это может случиться если приложение вызывает Py_Initialize () и Py_Finalize () больше чем один раз.

Скорее всего, __del__ содержит вызов <somemodule>.GetName(), но этот модуль уже был уничтожен ко времени вызова __del__.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...