Wat is de reden voor de AttributeError: ' module ' object heeft geen attribuut ' check\_output ', in Python?


Beste antwoord

Zonder code te zien is het moeilijk om een ​​definitief antwoord te verzinnen, maar Ik denk dat het probleem is dat de code die je importeert ongeveer zo is:

Je hebt een module genaamd fluff en binnen die module heb je een klasse genaamd fluff; in de fluff class is er een methode genaamd check\_output

Je code ziet er als volgt uit:

import fluff

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

Het probleem is dat al dat import fluff importeert de fluff module. De fluff-klasse die je nodig hebt, heet eigenlijk fluff.fluff.

Er zijn twee oplossingen:

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

Dit is een van de redenen waarom de naamgevingsconventie zo belangrijk is – als de modules en klassen volgen de PEP8-naamgevingsconventies, de code zou zijn

from fluff import Fluff # this imports the fluff class.

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

Die hoofdletter F is misschien genoeg om fouten te voorkomen – of je op zijn minst te wijzen op mogelijke problemen

-—

Het andere mogelijke antwoord is dat de module die u importeert, wordt overschaduwd door een ander bestand (met andere woorden, er is een bestand met dezelfde naam dat Python eerder vond in zijn zoektocht naar wat te importeren). De meest voorkomende oorzaak hiervan bij beginners is dat u uw script dezelfde naam geeft als de module die u probeert te importeren; aangezien Python ALTIJD het huidige directorybestand doorzoekt als je een script met de naam foo.py hebt en het doet een import foo, zal die import het script met de naam foo.py importeren – waarschijnlijk niet wat je wilt.

De beste manier om dit probleem te diagnosticeren is door de interactieve console in dezelfde map te openen en te typen:

>>> import

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

waarbij de naam is van de module die u probeert te importeren. De uitvoer van het commando op regel 2 is het pad van het bestand dat Python probeerde te importeren en je kunt zien of dat is waar het bestand zou moeten zijn.

Antwoord

Zonder te kijken bij uw code, zou het een van de twee problemen kunnen zijn (maar niet beperkt tot deze twee) die ik meteen zou kunnen bedenken, namelijk:

  1. Module is niet correct geïnstalleerd. Controleer de map met sitepakketten voor de module. Als het er is, kan het probleem niet zijn. 2, dat is:
  2. Niet draaien met een geschikte versie van Python, d.w.z. modules installeren die bedoeld zijn voor Python2 maar aanroepen met Python3-import. Gebruik pip om de module te verwijderen en probeer opnieuw te installeren met pip3 om de juiste versie te krijgen. Ik weet niet zeker waarom, maar sommige machines zoals mijn Raspberry Pi Zero W v1.1 standaard de pip-opdracht naar Python2 in plaats van 3. Opnieuw installeren met pip3 werkte voor mij, aangezien ik mijn code gebruik met de python3 commando in plaats van het gebruikelijke python.

Ik zou een tijdelijke “vuile” oplossing kunnen voorstellen, namelijk het kopiëren van de modulebron naar uw werkmap, dwz de map “module” nemen en deze in dezelfde map plaatsen als het bronbestand dat u gebruikt. Het kan ook zijn dat je een git-repository hebt gekloond of hebt uitgepakt uit een .zip-map met het module.py-bestand in een andere map, die zich in een andere map met dezelfde naam bevindt. In dit geval kan het helpen om module.module als module te importeren in plaats van de module gewoon meteen te importeren, zoals hier:

import module.module as module

in plaats van

import module

wat het aantal wijzigingen in uw code vermindert. Veel succes!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *