一个计算机技术爱好者与学习者

0%

好好学Python:Python代码质量检查

1. Pylint vs Flake8

FROM ChatGPT:

Pylint和Flake8都是用于Python代码静态分析的工具,它们都可以帮助您发现代码中的潜在问题并提供一些代码质量方面的建议。但是,它们的设计目标和使用方法有所不同。

Pylint是一个非常全面的工具,它会对代码进行更严格的检查,包括PEP 8风格指南和一些语法规则。它还可以检查代码中的错误和漏洞,并提供复杂度和维护性方面的建议。它还可以进行类型检查和代码重构建议等高级功能。因此,Pylint适合大型项目和团队,可以帮助他们保持代码质量和一致性。

Flake8是一个更轻量级的工具,主要关注代码风格和语法规则。它通过结合多个工具,如PyFlakes和PEP 8风格指南检查工具,提供了更快速和简便的检查方式。Flake8对于小型项目和个人开发者非常适用。

因此,如果您需要一个更全面的代码分析工具并且有时间和资源,您可以选择Pylint。但如果您想要一个更快速,轻便的工具,则Flake8可能更适合您。无论哪种选择,它们都可以提供有价值的帮助来改进您的代码质量和可维护性。

参考文档:

2. Pylint

1
2
pip install pylint
pylint test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
************* Module test
test.py:62:0: C0305: Trailing newlines (trailing-newlines)
test.py:1:0: C0114: Missing module docstring (missing-module-docstring)
test.py:30:-1: W0105: String statement has no effect (pointless-string-statement)
test.py:43:4: C0116: Missing function or method docstring (missing-function-docstring)
test.py:43:4: C0103: Method name "twoSum" doesn't conform to snake_case naming style (invalid-name)
test.py:43:21: W0621: Redefining name 'nums' from outer scope (line 57) (redefined-outer-name)
test.py:43:38: W0621: Redefining name 'target' from outer scope (line 58) (redefined-outer-name)
test.py:44:20: R1735: Consider using '{}' instead of a call to 'dict'. (use-dict-literal)
test.py:32:0: R0903: Too few public methods (1/2) (too-few-public-methods)
test.py:58:4: C0103: Constant name "target" doesn't conform to UPPER_CASE naming style (invalid-name)

------------------------------------------------------------------
Your code has been rated at 4.12/10 (previous run: 4.12/10, +0.00)

3. Flake8

1
2
3
pip install flake8
flake8 test.py
#flake8 --ignore=E231,E302 *.py
1
2
3
4
5
6
7
8
solution.py:32:1: E302 expected 2 blank lines, found 1
solution.py:45:14: E231 missing whitespace after ','
solution.py:52:52: E231 missing whitespace after ','
solution.py:57:14: E231 missing whitespace after ','
solution.py:57:16: E231 missing whitespace after ','
solution.py:57:19: E231 missing whitespace after ','
solution.py:60:31: E231 missing whitespace after ','
solution.py:62:1: W391 blank line at end of file

4. 小结

Pylint和Flake8的默认检查结果,完全不一致,这个是我没想到的。

综合来看,还是Pylint更优,因为它给出的检查结果更有意义。而Flake8给出的检查结果,都是些空格空行规范,这些可以通过配置autopep8自动进行格式化。

VSCode中autopep8配置方法参考《VSCode常用快捷键和配置》

使用autopep8的方法:

1
2
3
pip install autopep8
autopep8 test.py
autopep8 -i test.py

参考文档: