45

有一件事,我不明白。

为什么会这样

import scipy # happens with several other modules, too. I took scipy as an example now...

matrix = scipy.sparse.coo_matrix(some_params)

产生这个错误:

AttributeError: 'module' object has no attribute 'sparse'
4

4 回答 4

60

发生这种情况是因为该scipy模块没有任何名为sparse. 该属性仅在您import scipy.sparse.

当您只是 ; 时,子模块不会自动导入import scipy;您需要明确导入它们。大多数包也是如此,尽管包可以根据需要选择导入自己的子模块。(例如,如果scipy/__init__.py包含一个 statement import scipy.sparse那么sparse无论何时 import 都会导入子模块。scipy

于 2012-01-01T23:36:22.487 回答
5

因为你导入了 scipy,而不是稀疏的。试试from scipy import sparse

于 2012-01-01T23:36:32.293 回答
4

当对象的属性不可用时引发AttributeError 。

属性引用是一个主要的,后跟一个句点和一个名称:

属性引用 ::= 主要“。” 标识符

要返回该对象的有效属性列表,请使用dir(),例如:

dir(scipy)

所以可能你需要做的很简单:import scipy.sparse

于 2015-05-23T16:53:22.243 回答
-3

Python 中的默认命名空间是"__main__". 当您使用 时import scipy,Python 会创建一个单独的命名空间作为您的模块名称。Pyhton 中的规则是:当你想从另一个命名空间调用一个属性时,你必须使用完全限定的属性名。

于 2017-08-19T11:42:32.390 回答