为什么python中会出现这种AttributeError?
有一件事我不明白 为什么会这样为什么python中会出现这种AttributeError?,python,import,attributeerror,Python,Import,Attributeerror,有一件事我不明白 为什么会这样 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' 这是因为scipy模块没有任何名为sparse的属性。只有在
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'
这是因为
scipy
模块没有任何名为sparse
的属性。只有在导入scipy.sparse
时才能定义该属性
仅导入scipy时,子模块不会自动导入;您需要显式地导入它们。大多数包也是如此,尽管包可以选择导入自己的子模块。(例如,如果
scipy/\uuuuu init\uuuuuu.py
包含一条语句import scipy.sparse
,则无论何时导入scipy
)都会导入sparse
子模块,因为导入的是scipy,而不是sparse>)。尝试从scipy导入稀疏的?在对象的属性不可用时引发
是一个主键,后跟句点和名称:
attributeref::=主“.”标识符
要返回该对象的有效属性列表,请使用,例如:
因此,您可能只需要执行以下操作:import scipy.sparse
Python中的默认名称空间是“\uuuuu main\uuuu”
。使用import scipy
时,Python会创建一个单独的名称空间作为模块名。
Pyhton中的规则是:当你想从另一个名称空间调用一个属性时,你必须使用完全限定的属性名。这有什么麻烦?如果模块中不存在sparse
,您预计会发生什么?我没有意识到,sparse是scipy的一个子模块,并且子模块不会自动导入-正如@David Zaslavsky在下面指出的那样。选民应该解释他们为什么投了否决票,我不知道这个问题有什么错。事实上,我认为这是一个非常好的问题谢谢@julio.alegria,很高兴听到别人这么说。:-)我不知道,子模块不会自动导入。谢谢实际上,这取决于软件包是否也自动导入子模块。@Ethan:是的,我在答案中编辑了一条注释,大意是这样的。我认为值得注意的是,主要原因是存在不区分大小写的文件系统(即Windows)。在这样的系统上,可能很难知道文件“sparse.py”是否应该作为名为sparse
、或sparse
、甚至sparse
或sparse
的模块导入(如果它可能与解析S表达式有关)。Python选择在区分大小写和不区分大小写的文件系统上保证一致的行为,方法是要求显式导入来告诉它正确的名称(在您的程序或包\uuuu init\uuuuuuu.py
)?以前可以4到sp稀疏
dir(scipy)