2012-01-01 16 views
28

Anlayamadığım bir şey var. scipy modül sparse adında herhangi bir nitelik olmadığı için bu gerçekleşirPython'da bu AttributeError neden oluşur?

AttributeError: 'module' object has no attribute 'sparse' 
+3

? Modülde 'seyrek' yoksa, ne olmasını beklersiniz? Ben fark etmedi –

+1

, o seyrek SciPy bir * submodule * ve submodüller *** ** otomatik * ithal olmadığını - @ David Zaslavsky aşağıda belirttiği gibi. – Aufwind

+11

downvoters neden reddedildiğini açıklamalı, bu sorunun ne olduğunu anlamıyorum. Aslında, bu çok iyi bir soru olduğunu düşünüyorum – juliomalegria

cevap

41

:

Neden bu

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

matrix = scipy.sparse.coo_matrix(some_params) 

ürünler üretmekte bu hatayı yapıyor. Bu özellik sadece import scipy.sparse olduğunda tanımlanır.

Altmodüller otomatik olarak içe alamadım zaman sadece import scipy; bunları açıkça almanız gerekiyor. Aynı paket çoğu paket için de geçerlidir, ancak bir paket isterse kendi alt modüllerini içe aktarmayı seçebilir. (Örneğin, scipy/__init__.py sonra Eğer scipy içe zaman sparse alt modülü ithal edilecektir. Bir açıklama import scipy.sparse, dahil varsa), seyrek scipy değil ithal Çünkü

+1

Bilmiyordum, bu alt modüller otomatik olarak alınmıyor. Teşekkürler! – Aufwind

+0

Aslında, alt modüllerin de otomatik olarak içe aktarılıp aktarılmadığı pakete bağlı. –

+0

@Ethan: true, cevaba bu etkiyle ilgili bir not düzenledim. –

3

. from scipy import sparse'u dene? nesneye ayrılan mevcut değilken

1

AttributeError yükseltilir. , dir() kullanın mesela

attributeref ::= primary "." identifier

bu nesne için geçerli özellikler listesini döndürmek için:

dir(scipy) 

Yani muhtemelen

Bir attribute reference bir süre ve bir isim ardından birincildir basitçe yapmanız gerekir: Python import scipy.sparse

-1

varsayılan ad alanı "__main__" olduğunu. import scipy'u kullandığınızda, Python, modül adınız olarak ayrı bir ad alanı oluşturur. Pyhton içinde kural şudur: Eğer tam öznitelik adı kullanmak zorunda başka ad gelen bir öznitelik aramak istediğinizde.

Bunun neresi rahatsız Ne