web-dev-qa-db-fra.com

Pourquoi cette AttributeError dans python se produit-elle?

Il y a une chose que je ne comprends pas.

Pourquoi cela

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

matrix = scipy.sparse.coo_matrix(some_params)

produire cette erreur:

AttributeError: 'module' object has no attribute 'sparse'
34
Aufwind

Cela se produit car le module scipy n'a aucun attribut nommé sparse. Cet attribut n'est défini que lorsque vous import scipy.sparse.

Les sous-modules ne sont pas automatiquement importés lorsque vous venez de import scipy; vous devez les importer explicitement. Il en va de même pour la plupart des packages, bien qu'un package puisse choisir d'importer ses propres sous-modules s'il le souhaite. (Par exemple, si scipy/__init__.py comprenait une déclaration import scipy.sparse, then le sous-module sparse serait importé chaque fois que vous importez scipy.)

49
David Z

Parce que vous avez importé scipy, pas clairsemé. Essayez from scipy import sparse?

4
Dan

AttributeError est levé lorsque l'attribut de l'objet n'est pas disponible.

Un référence d'attribut est un primaire suivi d'un point et d'un nom:

attributeref :: = primary "." identifiant

Pour renvoyer une liste d'attributs valides pour cet objet, utilisez dir() , par exemple:

dir(scipy)

Donc, vous devez probablement faire simplement: import scipy.sparse

2
kenorb