如何用工具检测已知为列表的变量与None的冗余比较?
检测Python中冗余的非None判断
Mypy实现检测
Mypy作为静态类型检查工具,自带这类场景的检测能力,只要代码有正确的类型注解,就能识别冗余的is not None判断。
以你的示例代码为例,运行mypy会直接抛出如下错误提示:
error: Non-overlapping identity check (left operand type is "list[Any]", right operand type is "None") [comparison-overlap]
默认情况下comparison-overlap规则是启用的,若需要显式配置,可在项目的mypy.ini中添加:
[mypy] enable_error_code = comparison-overlap
Flake8插件方案
现成的flake8扩展也能解决这个问题,推荐使用flake8-bugbear:
- 该插件的
B009规则专门检测针对非Optional类型的is not None冗余判断,完全匹配你的需求。
先安装插件:
pip install flake8-bugbear
用flake8扫描代码时,会触发如下警告:
test.py:6:5: B009 redundant comparison: `a is not None` (expression has type "list")
其他可选工具
- Pyright:微软开发的静态类型检查工具,默认就能识别这类冗余判断,类型分析能力较强,无需额外配置即可给出提示。
内容的提问来源于stack exchange,提问作者tallito
相关产品推荐
相关产品推荐

