J'ai un projet Python utilisant PyDev dans Eclipse, et PyDev continue de générer de fausses erreurs pour mon code. J'ai un module settings
qui définit un settings
objet. J'importe cela dans le module b
et j'attribue un attribut avec:
from settings import settings
settings.main = object()
Dans certains de mes codes, mais pas dans tous, des déclarations comme:
from settings import settings
print settings.main
... générer des messages "Variable non définie depuis import: main" dans le volet d'erreur de code Eclipse, même si le code s'exécute sans problème. Comment puis-je corriger ces problèmes?
python
code-analysis
pydev
Chris B.
la source
la source
Réponses:
Pour le code de votre projet, le seul moyen est d'ajouter une déclaration indiquant que vous vous attendiez à cela - éventuellement protégé par un
if False
pour qu'il ne s'exécute pas (l'analyse de code statique ne voit que ce que vous voyez, pas les informations d'exécution - si vous ouvert ce module vous-même, vous n’auriez aucune indication que main était attendu)Pour surmonter cela, il y a quelques choix:
S'il s'agit d'un module externe, il est possible de l'ajouter au
forced builtins
afin que PyDev génère un shell pour lui permettre d'obtenir des informations d'exécution (voir http://pydev.org/manual_101_interpreter.html pour plus de détails) - c'est-à-dire: principalement, PyDev va importer le module dans un shell et faire undir(module)
etdir
sur les classes trouvées dans le module pour présenter les complétions et faire l'analyse du code.Vous pouvez utiliser Ctrl + 1 (Cmd + 1 pour Mac) dans une ligne avec une erreur et PyDev vous présentera une option pour ajouter un commentaire pour ignorer cette erreur.
Il est possible de créer un
stub
module et de l'ajouter auxpredefined
complétions ( http://pydev.org/manual_101_interpreter.html a également des détails à ce sujet).la source
try: import a; except: a=mockModule
y a-t-il un moyen de les supprimer sans les commentaires?J'utilise opencv qui repose sur des binaires, etc. donc j'ai des scripts où toutes les autres lignes ont cette erreur stupide. Python est un langage dynamique, de telles occasions ne doivent donc pas être considérées comme des erreurs.
J'ai complètement supprimé ces erreurs en allant à:
Fenêtre -> Préférences -> PyDev -> Editeur -> Analyse de code -> Indéfini -> Variable non définie depuis l'importation -> Ignorer
Et c'est ça.
Cela peut aussi être, Fenêtre -> Préférences -> PyDev -> Editeur -> Analyse de code -> Importations -> Importation introuvable -> Ignorer
la source
Le message marqué comme réponse offre une solution de contournement, pas une solution.
Cette solution fonctionne pour moi:
Window - Preferences - PyDev - Interpreters - Python Interpreter
Forced builtins
ongletNew...
multiprocessing
dans mon cas) et cliquez surOK
Non seulement les messages d'erreur disparaîtront, mais les membres du module seront également reconnus.
la source
re
mais une fois je n'ai plus fait d'encre rouge pour des choses commere.M
J'avais un problème similaire avec un projet Eclipse / PyDev. Dans ce projet, le répertoire racine du code python était un sous-répertoire du projet.
Lorsque le projet a été débogué ou exécuté, tout allait bien car le répertoire de travail était placé au bon endroit. Cependant, l'analyse du code PyDev n'a pas réussi à trouver les importations de module1 ou module2.
La solution était de modifier les propriétés du projet -> PyDev - section PYTHONPATH et de supprimer / MyProject de l'onglet des dossiers source et d'y ajouter / MyProject / src à la place.
la source
Cela a fonctionné pour moi:
étape 1) Retrait de l'interpréteur, configuration automatique à nouveau
étape 2) Fenêtre - Préférences - PyDev - Interpréteurs - Interpréteur Python Allez dans l'onglet Forcés intégrés Cliquez sur Nouveau ... Tapez le nom du module (curses dans mon cas) et cliquez sur OK
étape 3) Cliquez avec le bouton droit de la souris dans l'explorateur de projet sur le module qui génère des erreurs. Allez dans PyDev-> Analyse de code.
la source
J'ai eu le même problème. J'utilise Python et Eclipse sur Windows. Le code fonctionnait très bien, mais éclipse montre des erreurs partout. Après avoir changé le nom du dossier «Lib» en «lib» (C: \ Python27 \ lib), le problème a été résolu. Il semble que si la capitalisation des lettres ne correspond pas à celle du fichier de configuration, cela posera parfois des problèmes (mais cela ne semble pas toujours le cas, car la vérification des erreurs était correcte pendant longtemps avant que les problèmes n'apparaissent soudainement pour rien d'évident raison).
la source
Une approximation de ce que je faisais:
À quel pylint a dit:
E: 4,15: Undefined variable 'submodule' (undefined-variable)
J'ai résolu ce problème en modifiant mon importation comme:
Remarque: j'ai également renommé par variable importée pour avoir un nom en majuscule pour refléter sa nature constante.
la source
Il est possible que vous ayez simplement besoin de reconfigurer votre chemin python dans Eclipse. Voir ma réponse à une question similaire.
la source
dans les préférences -> PyDev -> PyLint sous les arguments à passer à PyLint ajoutez cette ligne:
vous devrez le faire pour chaque fichier généré. J'ai trouvé cela en googlant, mais j'ai perdu la référence.
la source
Cliquez avec le bouton droit dans l'explorateur de projet sur le module qui génère des erreurs. Allez dans PyDev-> Supprimer les marqueurs d'erreur.
la source
Ma réponse n'apporte rien de nouveau, juste un exemple concret que j'ai rencontré.
PyDev a affiché le message d'erreur "Variable non définie de l'importation: get_default_root_window ()"
Dans le shell python, vous pouvez voir qu'il s'agit d'un module `` intégré '' comme mentionné dans une réponse ci-dessus:
Maintenant, sous Window-> Preferences-> PyDev-> Interpreters-> Python Interpreter, j'ai sélectionné l'onglet 'Forced Builtins' et ajouté 'gtk.gdk' à la liste.
Maintenant, le message d'erreur ne s'affichait plus.
la source
Je trouve que ces 2 étapes fonctionnent pour moi tout le temps:
Les choses à noter ici:
Certains modules populaires s'installent avec une paire parent / enfant ayant le même nom. Dans ces cas, vous devez également ajouter ce parent à PYTHONPATH, en plus de son dossier grand-parent, que vous avez déjà confirmé / ajouté pour tout le reste.
Utilisez (par exemple) "google.appengine.api.memcache" lors de l'ajout à des fonctions intégrées forcées, PAS "memcache" uniquement, où "google" dans cet exemple est un enfant immédiat d'un dossier défini dans PYTHONPATH.
la source
Si vous êtes sûr que votre script s'exécute et qu'il s'agit d'une fausse alarme, allez dans Préférences> PyDev> Editeur> Analyse du code. Rétrogradez les erreurs en avertissements.
http://www.pydev.org/manual_adv_code_analysis.html
la source