Vad är anledningen till AttributeError: ' -modulen ' objektet har inget attribut ' check\_output ', i Python?


Bästa svaret

Utan att se kod är det svårt att komma med ett definitivt svar, men Jag tror att problemet är att koden du importerar är något som liknar den här:

Du har en modul som heter fluff och inuti den modulen har du en klass heter fluff; i fluffklassen det finns en metod som heter check\_output

Din kod ser ut så här:

import fluff

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

Problemet är att allt som import fluff gör är att importera fluffmodulen. Fluffklassen du behöver kallas faktiskt fluff.fluff.

Det finns två lösningar:

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

Detta är en av anledningarna till att namngivningskonventionen är så viktig – om modulerna och klasser följer PEP8-namngivningskonventionerna koden skulle vara

from fluff import Fluff # this imports the fluff class.

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

Det stora ”F” kan räcka för att förhindra fel – eller åtminstone leda dig till potentiella problem

-——

Det andra potentiella svaret är att modulen du importerar skuggas av en annan fil (det finns med andra ord en fil med samma namn som Python hittar tidigare i sin sökning efter vad som ska importeras). Den vanligaste orsaken till detta hos nybörjare är när du namnger ditt skript på samma sätt som modulen du försöker importera; eftersom Python ALLTID söker i den aktuella katalogfilen om du har ett skript som heter ”foo.py” och det gör ett ”import foo”, importerar den importen skriptet ”foo.py” – förmodligen inte vad du vill.

Det bästa sättet att diagnostisera problemet är att öppna den interaktiva konsolen i samma katalog och skriva:

>>> import

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

där är namnet på modulen du försöker importera. Utgången från kommandot på rad 2 kommer att vara sökvägen till filen som Python försökte importera och du kan se om det är där filen ska vara.

Svar

Utan att titta vid din kod kan det vara ett av två problem (men inte begränsat till dessa två) jag skulle kunna tänka på, direkt från bat, som är:

  1. Modulen är inte korrekt installerad. Kontrollera din webbplatspaketmapp för modulen. Om det är där kan det vara problem nej. 2, vilket är:
  2. Körs inte med en lämplig version av Python, dvs installera moduler avsedda för Python2 men ringa med Python3-import. Använd pip för att avinstallera modulen och försök sedan installera om med pip3 för att få rätt version. Inte säker på varför men vissa maskiner som min Raspberry Pi Zero W v1.1 standardinstallerar pip-kommandot till Python2 istället för 3. Ominstallering med pip3 fungerade för mig, eftersom jag kör min kod med python3 kommando istället för det vanliga python.

Jag kan föreslå en tillfällig ”smutsig” lösning som är att kopiera modulkällan till din arbetskatalog, dvs ta ”modul” -mappen och placera den i samma mapp som källfilen du kör. Det kan också vara så att du har klonat ett git-arkiv eller extraherat från en .zip-mapp som har module.py-filen i en annan mapp, som finns i en annan mapp med samma namn. I det här fallet kan det hjälpa att importera module.module som modul istället för att bara importera modulen direkt, precis så här:

import module.module as module

istället för

import module

vilket minskar mängden ändringar i din kod. Lycka till!

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *