为何pylint不在类内报Redefining built-in重定义内置警告及解决方法
Pylint内置名称重定义检测问题答复
1. 该行为属于Pylint的默认预期行为
Pylint的Redefining built-in(告警编码W0622)规则默认仅检测全局作用域的内置名称重定义,类作用域、函数局部作用域的重定义默认被排除在检测范围外,目的是减少误报——类属性、局部变量的命名不会污染全局命名空间,类似id、type这类常见命名在业务代码中使用频率很高,默认关闭这部分检测可以避免产生大量不必要的告警。
你给出的Django模型类中定义type字段的场景,就属于类作用域的命名,默认不会触发该告警。
2. 开启类/函数内部重定义内置检测的配置方法
你可以通过修改Pylint配置,移除类、函数作用域的检测排除规则,实现全作用域的内置重定义检测,以下是不同配置文件的修改方案:
方案1:pylintrc配置(项目根目录下的.pylintrc或pylintrc文件)
[MESSAGES CONTROL] # 确保开启W0622规则 enable = redefined-builtin [TYPECHECK] # 清空排除的作用域,即所有作用域都检测该规则 redefined-builtin-exclude-scope =
如果仅需要开启类作用域检测、保留函数局部作用域的排除,可以设置为redefined-builtin-exclude-scope = function。
方案2:pyproject.toml配置
[tool.pylint.'MESSAGES CONTROL'] enable = ["redefined-builtin"] [tool.pylint.typecheck] redefined-builtin-exclude-scope = []
方案3:VSCode本地配置
如果仅需要在当前VSCode项目中生效,可以修改.vscode/settings.json添加Pylint运行参数:
{ "python.linting.pylintArgs": [ "--enable=W0622", "--redefined-builtin-exclude-scope=" ] }
注意:开启全作用域检测后可能会出现误报,你可以在不需要检测的代码行末尾添加注释# pylint: disable=redefined-builtin单独忽略单条告警。
内容的提问来源于stack exchange,提问作者Bridge
相关产品推荐
相关产品推荐

