我有一个使用Python加载某些脚本的C ++应用程序。它调用脚本中的一些函数,一切正常,直到app退出并调用Py_Finalize。然后它显示以下内容:(GetName是其中一个脚本中的函数)
Exception AttributeError:“'module'对象在'garbage collection'中没有属性'GetName'”被忽略 致命的Python错误:垃圾收集期间的意外异常
然后应用程序崩溃了。 我在Windows上使用Python 3.1。任何建议将不胜感激。
答案 0 :(得分:4)
从文档到Py_Finalize():
错误和警告:破坏 模块中的模块和对象完成 随机顺序;这可能会导致 析构函数(
__del__()
方法)来 当他们依赖其他物体时失败 (甚至功能)或模块。 动态加载的扩展模块 由Python加载不会卸载。 分配的少量内存 Python解释器可能不是 释放(如果你发现泄漏,请 报告)。记忆被捆绑在一起 对象之间的引用不是 释放。一些内存分配 扩展模块可能无法释放。 某些扩展可能无法正常工作 如果他们的初始化程序是 被叫不止一次;这可能发生 如果应用程序调用 Py_Initialize()和Py_Finalize()更多 不止一次。
__del__
很可能包含对<somemodule>.GetName()
的调用,但该模块在调用__del__
时已被销毁。