2012-05-18 10 views
5

z następującego kodu:pylint narzeka na py.test: „moduł«pytest»nie ma elementu«podnosi»”

import pytest 
def test_a(): 
    with pytest.raises(Exception): 
     1/0 

Jeśli biegnę pylint na nim, będzie to miało skarżą się, że „podbicia” nie jest członkiem modułu pytest:

E: 3,9:test_a: Module 'pytest' has no 'raises' member 

co oczywiście nie jest prawdą. Każdy pomysł, dlaczego pylint popełnia taki błąd? Czy to znany błąd?

wersja py.test:

> py.test --version 
This is py.test version 2.2.3, imported from C:\Python27\lib\site-packages\pytest.pyc 

wersja pylint:

> pylint --version 
No config file found, using default configuration 
pylint 0.25.1, 
astng 0.23.1, common 0.57.1 
Python 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)] 
+0

Dobrze byłoby, gdyby mógł podać wersję pylint używasz (wyjście pylint --version), jak również wersja py.test. –

+0

@gurneyalex Witam Gurney, zaktualizowałem oryginalne pytanie, aby uwzględnić informacje o wersji. Dzięki. – KFL

Odpowiedz

3

Ostatni raz spojrzał pylib robi jakąś ciężką dynamiczny niski poziom Pythona rzeczy, takich jak całkowicie przedefiniowania kod importu. Jest bardzo prawdopodobne, że to całkowicie zakłóca pylint/astng i uniemożliwia mu uzyskanie tego, co znajduje się w module pytest: pylint/astng nie importuje kodu, który analizuje, analizuje go, co oznacza, że ​​rzeczy zainicjowane dynamicznie w czasie importu będą zwykle pozostają niezauważone, co z kolei generuje fałszywe alarmy, takie jak raportowane.

Stamtąd można napotkać następujące możliwości:

  • użyć innego unittest ramowej mniej dynamiczne niż py.test
  • wyciszyć ostrzeżenia/błędy w kodzie testowym ręcznie
  • użyć innego LINTER który jest szczęśliwszy niż pylint na py.test (interesuje mnie, w jaki sposób opłaty pychecker/pyflakes za ten kod)
  • napisać wtyczkę astng, która pomoże astng grzebić sztuczki pylib i złożyć go jako łatkę dla astng opiekunów (i otrzymaj z tego dodatkowy kredyt)
+3

Hej Alex. pytest nie używa już logiki dynamicznego importu "pylib", ponieważ od kilku lat jest to wersja 2.0. Wtyczki mogą jednak dodawać do przestrzeni nazw "pytest", która faktycznie ma miejsce w przypadku "pytest.raises". – hpk42

+0

Dzięki za precyzję @ hpk42. Dynamiczne dodawanie do przestrzeni nazw pytest jest jednak showstopper dla statycznej analizy pylint, więc wnioski w mojej odpowiedzi powyżej nadal się utrzymują. –

+0

Czy istnieje sposób dla pytest do informowania pylint o jego przestrzeni nazw? – hpk42

3

Można wyciszyć to w pliku pylintrc z: ignored-classes=pytest

+0

Ta odpowiedź dostałaby moją wiadomość, ale pominąłeś informacje, które chciałbym zobaczyć. Prawidłowa sekcja dla opcji: 'ignored-classes = pytest' powinna być umieszczona w' [TYPECHECK] 'w pliku pylintrc.Plik pylintrc można również umieścić w kilku różnych lokalizacjach, co ilustruje ten post: http://stackoverflow.com/a/16273555/955014 – imolit

Powiązane problemy