VS Code中是否有检测Python3内置函数/保留字被覆盖的Lint工具?
变量名覆盖内置函数的检测方案(VS Code环境)
问题背景
我之前遇到一个棘手的问题:把内置函数len作为方法参数传入后,在函数内部调用len(a)时触发了TypeError: 'int' object is not callable错误,代码示例如下:
def fun(len): a = [] ... len(a)
虽然知道Python允许将函数作为参数传递,但这种变量名覆盖内置函数的情况还是让我很意外。目前VS Code自带的Lint工具能检测未使用变量等问题,但默认没有开启这类命名冲突检测。想请教下,是否有合适的Python3 Lint工具可以检测这种情况,以及对应的VS Code配置方法?
环境信息:
- VS Code:1.23.1版本
- Python:3.6.5版本
- Python扩展:2018.4.0版本
- 操作系统:Microsoft Windows Server 2012 RC2
解决方案
当然有!你可以使用pylint或flake8这两款主流Lint工具来检测这类命名冲突,下面是具体的VS Code配置步骤:
1. 安装Lint工具
打开VS Code的终端,通过pip安装你选择的工具:
- 安装pylint:
pip install pylint - 安装flake8:
pip install flake8
2. 配置VS Code启用检测
打开VS Code的设置面板(快捷键Ctrl+,),搜索Python Linting相关选项进行配置:
若选择pylint:
- 勾选
Python > Linting: Pylint Enabled,启用pylint检测 - 在
Python > Linting: Pylint Args中添加--enable=redefined-builtin(这个规则专门检测内置函数被重定义的情况)
配置完成后,当你使用len这类内置函数名作为变量名时,pylint会给出类似W0622: Redefining built-in 'len'的警告提示。
若选择flake8:
- 勾选
Python > Linting: Flake8 Enabled,启用flake8检测 - flake8默认就会检测这类命名冲突,它会通过
F811规则标记问题,比如提示F811 redefinition of unused 'len',无需额外添加参数
额外提示
配置完成后,VS Code会在你编写代码时实时进行检测,一旦出现内置函数/保留字被覆盖的情况,编辑器会立刻在对应位置给出提示,帮你提前规避这类运行时错误。
内容的提问来源于stack exchange,提问作者JGFMK
相关产品推荐
相关产品推荐

