【问题标题】:Is there a Python (3) lint for variable names such as 'len' (built-in functions/reserved words etc)是否有用于变量名称的 Python (3) lint,例如“len”(内置函数/保留字等)
【发布时间】:2018-11-09 14:32:34
【问题描述】:

我被这个one 刺痛了(在方法调用的参数中使用len),然后定义了一个列表,并对其执行 len,产生:

def fun(len):
  a = []
  ...
  len(a)

>>>TypeError: 'int' object is not callable

VS Code IDE 是否有 Python3 lint,您可以将其配置为报告不是保留字/内置函数的变量?或一般的屏蔽/覆盖。 我没想到会有这种行为。

经过反思,我知道这是 Python 的一个特性,您可以将函数作为参数传递,因此 lenlen() 的双重语法。但这确实让我大吃一惊!

Lint 似乎报告了诸如未使用的变量之类的东西。

似乎不一致,它也没有提供开箱即用的名称掩码报告。

如果可行,有人可以建议如何在 VS Code 中进行设置吗?

环境

  • VS 代码:版本 1.23.1
  • Python 3.6.5
  • Python 扩展 2018.4.0
  • Microsoft Windows Server 2012 RC2。

【问题讨论】:

  • 有人能解释一下为什么人们建议关闭这个吗?
  • len 是一个函数的名称,而您正在使用的参数是 len 现在将是您输入 fun 的参数类型,我们看到它是整数,使用保留名称作为变量名是一种不好的编程习惯。
  • 对。我现在知道了……但我想问的是,是否有一个 lint 检查器可以标记它,以防你作为 Python 新手不知道这些东西。
  • 当然我知道这个功能。但是我没想到 Python 在我声明变量时会默默地覆盖它,我期待一些 IDE 反馈警告。
  • 是不是真的是保留字,是函数名。

标签: python-3.x visual-studio-code lint


【解决方案1】:

您可以使用Pylint 为您检查。

它有一个专用的警告代码W0622,用于“重新定义内置”(参见list of all error codes

要在 Visual Studio Code 中进行设置,您可以按照官方指南:Linting Python in VS Code

【讨论】:

    【解决方案2】:

    继@Samuel Dion-Girardeau 的answer

    1. 似乎 VS Code 不直接使用these codes。 相反,它使用更具描述性的键 here 定义 W0622redefined-builtin 在这种情况下。
    2. 在我的 VS Code 设置(文件>首选项>设置)中,我看到:
      2.1 python.linting.pylintUseMinimalCheckers": true
      2.2"python.linting.pylintArgs": []

    2.1 相当于这个See here

       --disable=all --enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode
    

    在那same place

    如果您在 pylintArgs 中指定一个值或使用 Pylint 配置 文件然后 pylintUseMinimalCheckers 被隐式设置为 false。

    1. 所以我需要追加:
      3.1 redefined-builtin--enable 部分 "python.linting.pylintArgs": []
      所以我们最终得到:
      3.2 python.linting.pylintUseMinimalCheckers": false
      (它推断这部分不是必需的......)
      3.3"python.linting.pylintArgs": [ "--disable=all", "--enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode,redefined-builtin"]

    (我从 DEFAULT USER SETTINGS 复制并粘贴到 USER_SETTINGS)。

    然后在那里应用更改,确保在键/值对之间添加逗号。


    脚注: 我最近也在一个 Amazon 实例上进行了设置。

    我忘了你也需要运行pip install pylinthere

    【讨论】:

    • 这是值得的。发现我也无意中使用了“id”作为变量。
    • 当它是一个函数时,VSCode 似乎也试图给你一个视觉线索,使文本变黄(比如内置的docs.python.org/3/library/functions.html)。- 从来没有把两个和两个放在一起。哇!
    • 我还有一个名为 globals 的模块,我也对其进行了重命名和重构。 W0622 绝对是一个有用的。希望这是一个默认值。在使用 Python 学习绳索时非常有用。
    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 2015-06-25
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2017-12-05
    • 2021-10-05
    相关资源
    最近更新 更多