Mam projekt w Pythonie używający PyDev w Eclipse, a PyDev ciągle generuje fałszywe błędy dla mojego kodu. Mam moduł, settings
który definiuje settings
obiekt. Importuję to w module b
i przypisuję atrybut z:
from settings import settings
settings.main = object()
W części mojego kodu - ale nie we wszystkich - stwierdzenia takie jak:
from settings import settings
print settings.main
... generuje komunikaty „Undefined variable from import: main” w panelu błędów kodu Eclipse, mimo że kod działa bez problemu. Jak mogę to poprawić?
python
code-analysis
pydev
Chris B.
źródło
źródło
Odpowiedzi:
W przypadku kodu w projekcie jedynym sposobem jest dodanie deklaracji, która mówi, że się tego spodziewałeś - prawdopodobnie chroniony przez
if False
kod, aby nie był wykonywany (statyczna analiza kodu widzi tylko to, co widzisz, a nie informacje o czasie wykonywania - jeśli otworzyłeś ten moduł samodzielnie, nie miałbyś żadnego wskazania, że główny był oczekiwany).Aby temu zaradzić, istnieje kilka możliwości:
Jeśli jest to jakiś moduł zewnętrzny, można go dodać do modułu
forced builtins
, aby PyDev utworzył powłokę, aby uzyskać informacje o czasie wykonywania (szczegóły można znaleźć na stronie http://pydev.org/manual_101_interpreter.html ) - tj. Głównie PyDev zaimportuj moduł w powłoce i wykonajdir(module)
aidir
na klasach znajdujących się w module, aby przedstawić uzupełnienia i przeprowadzić analizę kodu.Możesz użyć Ctrl + 1 (Cmd + 1 na Macu) w wierszu z błędem, a PyDev wyświetli opcję dodania komentarza, aby zignorować ten błąd.
Możliwe jest utworzenie
stub
modułu i dodanie go dopredefined
uzupełnień ( http://pydev.org/manual_101_interpreter.html również zawiera szczegóły na ten temat).źródło
try: import a; except: a=mockModule
czy istnieje sposób, aby je ukryć bez komentarzy?Używam opencv, które opiera się na plikach binarnych itp., Więc mam skrypty, w których każda inna linia ma ten głupi błąd. Python jest językiem dynamicznym, więc takie sytuacje nie powinny być traktowane jako błędy.
Całkowicie usunąłem te błędy, przechodząc do:
Okno -> Preferencje -> PyDev -> Edytor -> Analiza kodu -> Niezdefiniowana -> Niezdefiniowana zmienna z importu -> Ignoruj
I to jest to.
Może to być również Okno -> Preferencje -> PyDev -> Edytor -> Analiza kodu -> Importy -> Nie znaleziono importu -> Ignoruj
źródło
Wpis oznaczony jako odpowiedź zawiera obejście, a nie rozwiązanie.
U mnie działa to rozwiązanie:
Window - Preferences - PyDev - Interpreters - Python Interpreter
Forced builtins
zakładkiNew...
multiprocessing
w moim przypadku) i kliknijOK
Nie tylko znikną komunikaty o błędach, ale także zostaną rozpoznani członkowie modułu.
źródło
re
ale raz nie zrobiłem już czerwonego atramentu na rzeczy takie jakre.M
Miałem podobny problem z projektem Eclipse / PyDev. W tym projekcie katalog główny kodu Pythona był podkatalogiem projektu.
Kiedy projekt był debugowany lub uruchamiany, wszystko było w porządku, ponieważ katalog roboczy był ustawiony we właściwym miejscu. Jednak analiza kodu PyDev nie znalazła żadnych importów z module1 lub module2.
Rozwiązaniem była edycja właściwości projektu -> PyDev - sekcja PYTHONPATH i usunięcie / MyProject z zakładki folderów źródłowych i dodanie do niego / MyProject / src.
źródło
To zadziałało dla mnie:
krok 1) Usunięcie interpretera i ponowna automatyczna konfiguracja
krok 2) Okno - Preferencje - PyDev - Interpreters - Python Interpreter Przejdź do zakładki Forced builtins Kliknij New ... Wpisz nazwę modułu (w moim przypadku curses) i kliknij OK
krok 3) Kliknij prawym przyciskiem myszy w eksploratorze projektów na dowolnym module, który powoduje błędy. Przejdź do PyDev-> Analiza kodu.
źródło
Miałem ten sam problem. Używam Pythona i Eclipse w systemie Windows. Kod działał dobrze, ale zaćmienie wszędzie pokazuje błędy. Po zmianie nazwy folderu „Lib” na „lib” (C: \ Python27 \ lib) problem został rozwiązany. Wygląda na to, że jeśli wielkość liter nie zgadza się z tą w pliku konfiguracyjnym, czasami będzie to powodować problemy (ale wydaje się, że nie zawsze, ponieważ sprawdzanie błędów było dobrze przez długi czas, zanim problemy nagle pojawiły się i nie były oczywiste powód).
źródło
Przybliżenie tego, co robiłem:
Do którego pylint powiedział:
E: 4,15: Undefined variable 'submodule' (undefined-variable)
Rozwiązałem ten problem, zmieniając import, na przykład:
Uwaga: Zmieniłem również nazwę za pomocą importowanej zmiennej, aby miała nazwę zapisaną wielkimi literami, aby odzwierciedlić jej stały charakter.
źródło
Możliwe, że wystarczy ponownie skonfigurować ścieżkę Pythona w Eclipse. Zobacz moją odpowiedź na podobne pytanie.
źródło
w preferencjach -> PyDev -> PyLint pod argumentami do przekazania do PyLint dodaj tę linię:
będziesz musiał to zrobić dla każdego wygenerowanego pliku. Znalazłem to, szukając w Google, ale zgubiłem odniesienie.
źródło
Kliknij prawym przyciskiem myszy w eksploratorze projektu na dowolnym module, który powoduje błędy. Przejdź do PyDev-> Usuń znaczniki błędów.
źródło
Moja odpowiedź nie wnosi nic nowego, tylko konkretny przykład, z którym się spotkałem.
PyDev wyświetlił komunikat o błędzie „Niezdefiniowana zmienna z importu: get_default_root_window ()”
W powłoce Pythona widać, że jest to moduł `` wbudowany '', jak wspomniano w odpowiedzi powyżej:
Teraz w Window-> Preferences-> PyDev-> Interpreters-> Python Interpreter, wybrałem zakładkę „Forced Builtins” i dodałem „gtk.gdk” do listy.
Teraz komunikat o błędzie już się nie wyświetlał.
źródło
Uważam, że te 2 kroki działają dla mnie cały czas:
Rzeczy, na które należy zwrócić uwagę:
Niektóre popularne moduły są instalowane z parami rodziców i dzieci o tej samej nazwie. W takich przypadkach musisz również dodać tego rodzica do PYTHONPATH, oprócz jego folderu dziadków, który już potwierdziłeś / dodałeś do wszystkiego innego.
Użyj (na przykład) „google.appengine.api.memcache” podczas dodawania do wymuszonych wbudowanych elementów, a NIE tylko „memcache”, gdzie „google” w tym przykładzie jest bezpośrednim elementem podrzędnym folderu zdefiniowanego w PYTHONPATH.
źródło
Jeśli masz pewność, że skrypt działa i jest to fałszywy alarm, przejdź do opcji Preferencje> PyDev> Edytor> Analiza kodu. Zdegraduj błędy do ostrzeżeń.
http://www.pydev.org/manual_adv_code_analysis.html
źródło