Was ist der Grund für den AttributeError: ' Modul ' Objekt hat kein Attribut ' check\_output ', in Python?


Beste Antwort

Ohne Code zu sehen, ist es schwierig, eine endgültige Antwort zu finden, aber Ich denke, das Problem ist, dass der Code, den Sie importieren, ungefähr so ​​aussieht:

Sie haben ein Modul namens fluff und in diesem Modul haben Sie eine Klasse fluff; In der Fluff-Klasse gibt es eine Methode namens check\_output

Ihr Code sieht folgendermaßen aus:

import fluff

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

Das Problem ist, dass all das import fluff importiert das Fluff-Modul. Die benötigte Fluff-Klasse heißt tatsächlich fluff.fluff.

Es gibt zwei Lösungen:

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

Dies ist einer der Gründe, warum die Namenskonvention so wichtig ist – wenn die Module und Klassen folgen den PEP8-Namenskonventionen. Der Code lautet

from fluff import Fluff # this imports the fluff class.

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

Dieses Großbuchstaben F könnte ausreichen, um Fehler zu vermeiden – oder Sie zumindest auf potenzielle Probleme hinzuweisen.

Die andere mögliche Antwort lautet: Das Modul, das Sie importieren, wird von einer anderen Datei beschattet (mit anderen Worten, es gibt eine Datei mit demselben Namen, die Python früher bei der Suche nach dem zu importierenden Element gefunden hat). Die häufigste Ursache für Anfänger ist, dass Sie Ihr Skript genauso benennen wie das Modul, das Sie importieren möchten. Da Python IMMER die aktuelle Verzeichnisdatei durchsucht, wenn Sie ein Skript mit dem Namen foo.py haben und es ein import foo ausführt, importiert dieser Import das Skript mit dem Namen foo.py – wahrscheinlich nicht das, was Sie wollen.

Der beste Weg, um dieses Problem zu diagnostizieren, besteht darin, die interaktive Konsole im selben Verzeichnis zu öffnen und Folgendes einzugeben:

>>> import

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

wobei der Name des Moduls ist, das Sie importieren möchten. Die Ausgabe des Befehls in Zeile 2 ist der Pfad der Datei, die Python zu importieren versucht hat, und Sie können sehen, ob sich die Datei dort befinden sollte.

Antwort

Ohne hinzuschauen Bei Ihrem Code könnte es eines von zwei Problemen sein (aber nicht auf diese beiden beschränkt), an die ich sofort denken könnte:

  1. Modul ist nicht richtig installiert. Überprüfen Sie Ihren Site-Packages-Ordner auf das Modul. Wenn es da ist, könnte es Problem Nr. 2:
  2. Wird nicht mit einer geeigneten Version von Python ausgeführt, d. H. Es werden Module installiert, die für Python2 bestimmt sind, aber mit Python3-Import aufgerufen. Verwenden Sie pip, um das Modul zu deinstallieren, und versuchen Sie dann, es erneut mit pip3 zu installieren, um die entsprechende Version zu erhalten. Ich weiß nicht warum, aber einige Computer wie mein Raspberry Pi Zero W v1.1 verwenden standardmäßig den Befehl pip anstelle von 3. Die Neuinstallation mit pip3 hat bei mir funktioniert, da ich meinen Code mit der python3 Befehl anstelle des üblichen python.

Ich könnte eine vorübergehende „schmutzige“ Lösung vorschlagen, die darin besteht, die Modulquelle in Ihre zu kopieren Arbeitsverzeichnis, dh nehmen Sie den Ordner „module“ und legen Sie ihn im selben Ordner ab wie die Quelldatei, die Sie ausführen. Es kann auch sein, dass Sie ein Git-Repository geklont oder aus einem ZIP-Ordner extrahiert haben, in dem sich die Datei module.py in einem anderen Ordner befindet, der sich in einem anderen Ordner mit demselben Namen befindet. In diesem Fall kann es hilfreich sein, module.module als Modul zu importieren, anstatt das Modul einfach sofort zu importieren:

import module.module as module

anstelle von

import module

, wodurch die Anzahl der Änderungen in Ihrem Code verringert wird. Viel Glück!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.