Почему эта ошибка AttributeError в python происходит? - PullRequest
34 голосов
/ 02 января 2012

Есть одна вещь, которую я не понимаю.

Почему это

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 ]

49 голосов
/ 02 января 2012

Это происходит потому, что у модуля scipy нет атрибута с именем sparse. Этот атрибут определяется только тогда, когда вы import scipy.sparse.

Подмодули не импортируются автоматически, когда вы просто import scipy; вам нужно импортировать их явно. То же самое относится к большинству пакетов, хотя пакет может выбрать импорт своих собственных подмодулей, если он этого хочет. (Например, если scipy/__init__.py включает оператор import scipy.sparse, , тогда подмодуль sparse будет импортирован при каждом импорте scipy.)

4 голосов
/ 02 января 2012

Потому что вы импортировали scipy, а не разреженный.Попробуйте from scipy import sparse?

2 голосов
/ 23 мая 2015

AttributeError вызывается, когда атрибут объекта недоступен.

Ссылка на атрибут является первичным, за которым следует точка и имя:

attributeref :: = primary "."идентификатор

Чтобы вернуть список допустимых атрибутов для этого объекта, используйте dir(), например:

dir(scipy)

Так что, вероятно, вам нужно сделать просто: import scipy.sparse

0 голосов
/ 19 августа 2017

Пространством имен по умолчанию в Python является "__main__".Когда вы используете import scipy, Python создает отдельное пространство имен в качестве имени вашего модуля.Правило в Pyhton: когда вы хотите вызвать атрибут из другого пространства имен, вы должны использовать полное имя атрибута.

...