导致这个Python异常的原因是什么?

2 投票
1 回答
1267 浏览
提问于 2025-04-15 15:21

我有一个C++的应用程序,它使用Python来加载一些脚本。这个应用会调用脚本中的一些函数,一切运行得很好,直到应用退出并调用Py_Finalize。然后它显示了以下内容:(GetName是脚本中的一个函数)

异常AttributeError:“'module'对象没有'GetName'这个属性”,在'垃圾回收'时被忽略

致命的Python错误:在垃圾回收期间发生意外异常

然后应用程序崩溃了。

我在Windows上使用的是Python 3.1。任何建议都非常感谢。

1 个回答

4

来自Py_Finalize()的文档:

一些问题和注意事项:模块和模块中的对象被销毁的顺序是随机的;这可能导致析构函数(__del__()方法)在依赖其他对象(甚至是函数)或模块时失败。Python加载的动态扩展模块不会被卸载。Python解释器分配的小部分内存可能不会被释放(如果你发现内存泄漏,请报告)。在对象之间形成的循环引用占用的内存不会被释放。一些扩展模块分配的内存可能不会被释放。如果扩展的初始化过程被调用超过一次,可能会导致一些扩展无法正常工作;这种情况可能发生在应用程序多次调用Py_Initialize()和Py_Finalize()时。

很可能是__del__中包含了对<somemodule>.GetName()的调用,但在__del__被调用时,该模块已经被销毁了。

撰写回答