如果我这样做:
new_list = []
new_list.foo()
flake8 不会为 foo() 方法返回错误,因为它不是“列表”方法。
这是正常的还是我需要配置一些东西?
flake8
不处理问题,但PyLint
确实 - 发出no-member
警告:
$ 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)
而且,PyCharm 代码分析器的内置也会警告未解析的属性:
Flake8是这些工具的包装器:
- PyFlakes
- pep8
- Ned Batchelder 的 McCabe 剧本
PyFlakes是您可能期望检测到此类错误的部分。但它检测到的很少,它解释了原因:
Pyflakes 也比 Pylint 或 Pychecker 更快。这主要是因为 Pyflakes 只单独检查每个文件的语法树。因此,Pyflakes 可以检查的事物类型受到更多限制。
flake8文档列出了 Pyflakes 提供的错误代码:
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
我支持 PyCharm 的推荐,其次是 PyLint。