2016-05-08 17 views
1

finden Wenn ich etwas tun:Python: flake8 kann nicht nicht exising Methode

new_list = [] 
new_list.foo() 

flake8 keinen Fehler für foo() Methode zurückgeben, da es nicht eine ‚Liste‘ Methode.

Ist das normal oder muss ich etwas konfigurieren?

+1

Sie fragen nach statischen Analysen, die in einer dynamischen Sprache sehr schwierig sind und sicherlich nicht in Betracht kommen, was pylint macht. –

Antwort

3

flake8 behandeln nicht das Problem, aber PyLint nicht - gibt die no-member Warnung:

$ pylint test.py 
No config file found, using default configuration 
************* Module test 
C: 1, 0: Missing module docstring (missing-docstring) 
C: 1, 0: Invalid constant name "new_list" (invalid-name) 
E: 2, 0: Instance of 'list' has no 'foo' member (no-member) 

Und würde die built-in to PyCharm code analyzer auch über das ungelöste Attribut warnen:

enter image description here

+0

Ich benutze Emacs und nach dem Lesen Ihres Kommentars habe ich es eingerichtet, um auch Pyint zu verwenden und jetzt bekomme ich den Fehler. Vielen Dank! –

0

Flake8 ist ein Wrapper um diese Werkzeuge:

  • Pyflakes
  • PEP8
  • McCabe Skript Ned Batchelder

PyFlakes ist der Teil, der Sie diese Art von Fehler zu erkennen erwarten könnte. Aber es erkennt sehr wenig, und es erklärt warum:

Pyflakes ist auch schneller als Pyint oder Pychecker. Dies liegt hauptsächlich daran, dass Pyflakes nur den Syntaxbaum jeder Datei einzeln untersucht. Infolgedessen ist Pyflakes in den Arten von Dingen, die es überprüfen kann, begrenzter.

Die flake8 Dokumentenliste die Fehlercodes von Pyflakes bereitgestellt:

code sample message 
F401 module imported but unused 
F402 import module from line N shadowed by loop variable 
F403 ‘from module import *’ used; unable to detect undefined names 
F404 future import(s) name after other statements 
F811 redefinition of unused name from line N 
F812 list comprehension redefines name from line N 
F821 undefined name name 
F822 undefined name name in __all__ 
F823 local variable name ... referenced before assignment 
F831 duplicate argument name in function definition 
F841 local variable name is assigned to but never used 

Ich zweite Empfehlung für PyCharm, gefolgt von PyLint.