Hva er årsaken til AttributeError: ' module ' objektet har ingen attributt ' check\_output ', i Python?


Beste svaret

Uten å se kode er det vanskelig å komme med et definitivt svar, men Jeg tror problemet er at koden du importerer er noe som ligner på dette:

Du har en modul kalt fluff og inne i den modulen har du en klasse kalt fluff; i fluffklassen er det en metode som heter check\_output

Koden din ser slik ut:

import fluff

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

Problemet er at alt som import fluff gjør er å importere lo-modulen. Fluffklassen du trenger heter faktisk fluff.fluff.

Det er to løsninger:

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

Dette er en av grunnene til at navnekonvensjonen er så viktig – hvis modulene og klasser følger PEP8-navnekonvensjonene koden ville være

from fluff import Fluff # this imports the fluff class.

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

Den store bokstaven F kan være nok til å forhindre feil – eller i det minste peke deg inn i potensielle problemer

-——

Det andre potensielle svaret er at modulen du importerer blir skyggelagt av en annen fil (det er med andre ord en fil med samme navn som Python finner tidligere i søket etter hva du skal importere). Den vanligste årsaken til dette hos nybegynnere er når du navngir skriptet på samme måte som modulen du prøver å importere; siden Python ALLTID søker i den gjeldende katalogfilen hvis du har et skript kalt foo.py og det gjør et importer foo, vil den importen importere skriptet med navnet foo.py – sannsynligvis ikke det du vil ha.

Den beste måten å diagnostisere dette problemet er å åpne den interaktive konsollen i samme katalog og skrive:

>>> import

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

der er navnet på modulen du prøver å importere. Utgangen av kommandoen på linje 2 vil være banen til filen som Python prøvde å importere, og du kan se om det er der filen skal være.

Svar

Uten å se på koden din, kan det være et av to problemer (men ikke begrenset til disse to) jeg kunne tenke på, rett utenfor flaggermusen, som er:

  1. Modulen er ikke riktig installert. Sjekk mappen for nettstedspakker for modulen. Hvis det er der, kan det være problem nr. 2, som er:
  2. Kjører ikke med en passende versjon av Python, dvs. installerer moduler ment for Python2 men ringer med Python3-import. Bruk pip for å avinstallere modulen, og prøv deretter å installere på nytt med pip3 for å få riktig versjon. Ikke sikker på hvorfor, men noen maskiner som Raspberry Pi Zero W v1.1 standard pip-kommandoen til Python2 i stedet for 3. Reinstallering med pip3 fungerte for meg, siden jeg kjører koden min med python3 kommando i stedet for den vanlige python.

Jeg kan foreslå en midlertidig «skitten» løsning som er å kopiere moduskilden til din arbeidskatalog, dvs. tar “modul” -mappen og plasserer den i samme mappe som kildefilen du kjører. Det kan også være at du har klonet et git-arkiv eller hentet fra en .zip-mappe som har module.py-filen i en annen mappe, som er i en annen mappe med samme navn. I dette tilfellet kan det hjelpe å importere module.module som modul i stedet for bare å importere modulen med en gang, akkurat slik:

import module.module as module

i stedet for

import module

som reduserer mengden endringer i koden din. Lykke til!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *