Qual è il motivo dellerrore AttributeError: ' module ' loggetto non ha attributi ' check\_output ', in Python?


Migliore risposta

Senza vedere il codice è difficile trovare una risposta definitiva, ma Penso che il problema sia che il codice che stai importando è qualcosa di simile a questo:

Hai un modulo chiamato fluff e allinterno di quel modulo hai una classe chiamato fluff; nella classe fluff cè un metodo chiamato check\_output

Il tuo codice ha questo aspetto:

import fluff

cfg = fluff.check\_output(stuff) # You want the fluff class here

Il problema è che tutto ciò import fluff non è altro che importare il modulo fluff. La classe fluff di cui hai bisogno si chiama in realtà fluff.fluff.

Ci sono due soluzioni:

1:

import fluff

cfg = fluff.fluff.check\_output(stuff) # You want the fluff class here

2:

from fluff import fluff # this imports the fluff class.

cfg = fluff.check\_output(stuff) # You want the fluff class here

Questo è uno dei motivi per cui la convenzione di denominazione è così importante, se i moduli e le classi seguono le convenzioni di denominazione PEP8 il codice sarebbe

from fluff import Fluff # this imports the fluff class.

cfg = Fluff.check\_output(stuff) # You want the fluff class here

Quella “F” maiuscola potrebbe essere sufficiente per evitare errori o almeno per indurti a potenziali problemi

-——

Laltra potenziale risposta è che il il modulo che stai importando è oscurato da un altro file (in altre parole cè un file con lo stesso nome che Python trova in precedenza nella sua ricerca di cosa importare). La causa più comune di ciò nei principianti è quando si nomina lo script come il modulo che si sta tentando di importare; poiché Python cerca SEMPRE il file della directory corrente se hai uno script chiamato foo.py e fa un import foo, tale import importerà lo script chiamato foo.py – probabilmente non quello che vuoi.

Il modo migliore per diagnosticare questo problema è aprire la console interattiva nella stessa directory e digitare:

>>> import

>>> .\_\_file\_\_

dove è il nome del modulo che stai tentando di importare. Loutput del comando sulla riga 2 sarà il percorso del file che Python ha cercato di importare e puoi vedere se è lì che dovrebbe essere il file.

Rispondi

Senza guardare al tuo codice, potrebbe essere uno dei due problemi (ma non limitato a questi due) a cui potrei pensare, fin dallinizio, che sono:

  1. Il modulo non è installato correttamente. Controlla la cartella dei pacchetti del sito per il modulo. Se è lì, potrebbe essere il problema no. 2, che è:
  2. Non in esecuzione con una versione appropriata di Python, ovvero installazione di moduli pensati per Python2 ma chiamata con importazione Python3. Usa pip per disinstallare il modulo, quindi prova a reinstallare con pip3 per ottenere la versione appropriata. Non sono sicuro del perché, ma alcune macchine come il mio Raspberry Pi Zero W v1.1 hanno come impostazione predefinita il comando pip su Python2 invece di 3. La reinstallazione con pip3 ha funzionato per me, poiché sto eseguendo il mio codice utilizzando python3 invece del solito python.

Potrei suggerire una soluzione temporanea “sporca” che consiste nel copiare il sorgente del modulo nel tuo directory di lavoro, ovvero prendere la cartella “modulo” e posizionarla nella stessa cartella del file sorgente che stai eseguendo. Potrebbe anche essere che tu abbia clonato un repository git o estratto da una cartella .zip che ha il file module.py allinterno di unaltra cartella, che si trova in unaltra cartella con lo stesso nome. In questo caso, potrebbe essere utile importare module.module come modulo invece di importare semplicemente il modulo immediatamente, proprio in questo modo:

import module.module as module

invece di

import module

che riduce la quantità di modifiche allinterno del codice. Buona fortuna!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *