Почему этот атрибут AttributeError в python происходит?
Есть одна вещь, которую я не понимаю.
Почему это
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'
Ответы
Ответ 1
Это происходит потому, что модуль scipy
не имеет атрибута с именем sparse
. Этот атрибут определяется только тогда, когда вы import scipy.sparse
.
Субмодули автоматически не импортируются, когда вы просто import scipy
; вам нужно импортировать их явно. То же самое справедливо для большинства пакетов, хотя пакет может выбрать импорт собственных подмодулей, если захочет. (Например, если scipy/__init__.py
включил оператор import scipy.sparse
, то подмодуль sparse
будет импортироваться всякий раз, когда вы импортируете scipy
.)
Ответ 2
Потому что вы импортировали scipy, а не разреженные. Попробуйте from scipy import sparse
?
Ответ 3
AttributeError возникает, когда атрибут объекта недоступен.
An ссылка атрибута является первичной, за которой следует период и имя:
attributeref:: = primary "." Идентификатор
Чтобы вернуть список допустимых атрибутов для этого объекта, используйте dir()
, например:
dir(scipy)
Так что, вероятно, вам нужно сделать просто: import scipy.sparse
Ответ 4
По умолчанию пространство имен в Python равно "__main__"
. Когда вы используете import scipy
, Python создает отдельное пространство имен в качестве имени вашего модуля.
Правило в Pyhton: когда вы хотите вызвать атрибут из других пространств имен, вы должны использовать полное имя атрибута.