Ich habe ein Python-Projekt, das PyDev in Eclipse verwendet, und PyDev generiert immer wieder falsche Fehler für meinen Code. Ich habe ein Modul settings
, das ein settings
Objekt definiert . Ich importiere das in Modul b
und weise ein Attribut zu mit:
from settings import settings
settings.main = object()
In einigen meiner Codes - aber nicht in allen - Aussagen wie:
from settings import settings
print settings.main
... im Eclipse-Code-Fehlerbereich "Undefinierte Variable aus Import: Main" -Nachrichten generieren, obwohl der Code problemlos ausgeführt wird. Wie kann ich diese korrigieren?
python
code-analysis
pydev
Chris B.
quelle
quelle
Antworten:
Für Code in Ihrem Projekt besteht die einzige Möglichkeit darin, eine Deklaration hinzuzufügen, die besagt, dass Sie dies erwartet haben - möglicherweise geschützt durch eine,
if False
damit es nicht ausgeführt wird (die statische Code-Analyse sieht nur das, was Sie sehen, keine Laufzeitinformationen -, wenn Sie dies tun Wenn Sie dieses Modul selbst geöffnet haben, haben Sie keinen Hinweis darauf, dass main erwartet wurde.Um dies zu überwinden, gibt es einige Möglichkeiten:
Wenn es sich um ein externes Modul handelt, können Sie es dem Modul hinzufügen,
forced builtins
sodass PyDev eine Shell erstellt, um Laufzeitinformationen abzurufen ( Details finden Sie unter http://pydev.org/manual_101_interpreter.html ) Importieren Sie das Modul in eine Shell und führen Sie eindir(module)
unddir
für die im Modul gefundenen Klassen aus, um Vervollständigungen darzustellen und eine Code-Analyse durchzuführen.Sie können Strg + 1 (Cmd + 1 für Mac) in einer fehlerhaften Zeile verwenden. PyDev bietet Ihnen die Möglichkeit, einen Kommentar hinzuzufügen, um diesen Fehler zu ignorieren.
Es ist möglich, ein
stub
Modul zu erstellen und zu denpredefined
Vervollständigungen hinzuzufügen ( http://pydev.org/manual_101_interpreter.html enthält auch Details dazu).quelle
try: import a; except: a=mockModule
es eine Möglichkeit , diese ohne die Kommentare zu unterdrücken?Ich verwende opencv, das auf Binärdateien usw. basiert, also habe ich Skripte, in denen jede andere Zeile diesen dummen Fehler aufweist. Python ist eine dynamische Sprache, daher sollten solche Anlässe nicht als Fehler angesehen werden.
Ich habe diese Fehler vollständig behoben, indem ich zu:
Fenster -> Einstellungen -> PyDev -> Editor -> Codeanalyse -> Undefiniert -> Undefinierte Variable aus Import -> Ignorieren
Und das ist das.
Es kann auch sein, Fenster -> Einstellungen -> PyDev -> Editor -> Code-Analyse -> Importe -> Import nicht gefunden -> Ignorieren
quelle
Der als Antwort gekennzeichnete Beitrag bietet eine Problemumgehung und keine Lösung.
Diese Lösung funktioniert bei mir:
Window - Preferences - PyDev - Interpreters - Python Interpreter
Forced builtins
RegisterkarteNew...
multiprocessing
in meinem Fall) und klicken Sie aufOK
Die Fehlermeldungen verschwinden nicht nur, die Modulmitglieder werden auch erkannt.
quelle
re
aber einmal habe ich keine rote Tinte mehr für Dinge wiere.M
Ich hatte ein ähnliches Problem mit einem Eclipse / PyDev-Projekt. In diesem Projekt war das Stammverzeichnis des Python-Codes ein Unterverzeichnis des Projekts.
Beim Debuggen oder Ausführen des Projekts war alles in Ordnung, da das Arbeitsverzeichnis auf den richtigen Ort eingestellt war. Bei der PyDev-Code-Analyse konnten jedoch keine Importe von Modul1 oder Modul2 gefunden werden.
Die Lösung bestand darin, die Projekteigenschaften -> PyDev - PYTHONPATH zu bearbeiten und / MyProject von der Registerkarte Quellordner zu entfernen und stattdessen / MyProject / src hinzuzufügen.
quelle
Das hat bei mir funktioniert:
Schritt 1) Entfernen Sie den Interpreter und konfigurieren Sie ihn erneut automatisch
Schritt 2) Fenster - Einstellungen - PyDev - Interpreter - Python-Interpreter Wechseln Sie zur Registerkarte Forced Builtins. Klicken Sie auf Neu ... Geben Sie den Namen des Moduls ein (in meinem Fall Flüche) und klicken Sie auf OK
Schritt 3) Klicken Sie im Projektexplorer mit der rechten Maustaste auf das Modul, bei dem Fehler auftreten. Gehen Sie zu PyDev-> Code-Analyse.
quelle
Ich hatte das gleiche Problem. Ich verwende Python und Eclipse unter Windows. Der Code lief einwandfrei, aber Eclipse zeigt überall Fehler. Nachdem ich den Namen des Ordners 'Lib' in 'lib' (C: \ Python27 \ lib) geändert hatte, wurde das Problem behoben. Es scheint, dass wenn die Groß- und Kleinschreibung der Buchstaben nicht mit der in der Konfigurationsdatei übereinstimmt, dies manchmal zu Problemen führt (dies scheint jedoch nicht immer der Fall zu sein, da die Fehlerprüfung lange Zeit in Ordnung war, bevor die Probleme plötzlich nicht mehr offensichtlich waren Grund).
quelle
Eine Annäherung an das, was ich tat:
Zu welchem Pylint sagte:
E: 4,15: Undefined variable 'submodule' (undefined-variable)
Ich habe dies behoben, indem ich meinen Import wie folgt geändert habe:
Hinweis: Ich habe auch nach importierter Variable umbenannt, um einen Großbuchstaben zu erhalten, der dessen konstante Natur widerspiegelt.
quelle
Möglicherweise müssen Sie nur Ihren Python-Pfad in Eclipse neu konfigurieren. Siehe meine Antwort auf eine ähnliche Frage.
quelle
Fügen Sie in den Einstellungen -> PyDev -> PyLint unter Argumenten, die an PyLint übergeben werden sollen , diese Zeile hinzu:
Sie müssen dies für jedes generierte tun. Ich habe das durch googeln gefunden, aber ich habe die Referenz verloren.
quelle
Klicken Sie im Projektexplorer mit der rechten Maustaste auf das Modul, bei dem Fehler auftreten. Gehen Sie zu PyDev-> Fehlermarkierungen entfernen.
quelle
Meine Antwort trägt nichts Neues bei, nur ein konkretes Beispiel, auf das ich gestoßen bin.
PyDev zeigte die Fehlermeldung "Undefinierte Variable vom Import: get_default_root_window ()" an.
In der Python-Shell können Sie sehen, dass dies ein eingebautes Modul ist, wie in der obigen Antwort erwähnt:
Jetzt habe ich unter Fenster-> Einstellungen-> PyDev-> Interpreter-> Python-Interpreter die Registerkarte 'Forced Builtins' ausgewählt und 'gtk.gdk' zur Liste hinzugefügt.
Jetzt wurde die Fehlermeldung nicht mehr angezeigt.
quelle
Ich finde, dass diese 2 Schritte die ganze Zeit für mich funktionieren:
Die Dinge, die hier zu beachten sind:
Einige beliebte Module werden mit einem übergeordneten und untergeordneten Paar mit demselben Namen installiert. In diesen Fällen müssen Sie dieses übergeordnete Element zusätzlich zu seinem Großelternordner, den Sie bereits für alles andere bestätigt / hinzugefügt haben, zu PYTHONPATH hinzufügen.
Verwenden Sie (zum Beispiel) "google.appengine.api.memcache" beim Hinzufügen zu erzwungenen Buildins, NICHT nur "memcache", wobei "google" in diesem Beispiel ein unmittelbares untergeordnetes Element eines in PYTHONPATH definierten Ordners ist.
quelle
Wenn Sie sicher sind, dass Ihr Skript ausgeführt wird und es sich um einen Fehlalarm handelt, gehen Sie zu Einstellungen> PyDev> Editor> Code-Analyse. Herabstufen der Fehler zu Warnungen.
http://www.pydev.org/manual_adv_code_analysis.html
quelle