皮林特和 "referenced before assignment"

pylint and "referenced before assignment"

对于下面的代码

"""Test pylint on undefined variable"""
import random


def main():
    """Use undefined variable"""

    if random.randint(0, 10) == 6:
        thing = "hi"
    print(thing)


if __name__ == '__main__':
    main()

PyCharm 正确报告问题。

pylint (2.0.0, Python 3.6.6) 但是不识别:

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

但我希望它能找到它,以便让我的 CI 在这些情况下失败。

所以其实我有两个问题:

Is there an option for pylint to enable so that it can find this kind of error?

Pylint 目前无法检测条件或控制流块中可能未定义的变量。 Pylint 的未来版本可能能够识别这些类型的错误。在您提出问题时,像您的示例这样的控制流块内部 add support for recognizing possible undefined variables 存在未决问题。

Pylint 会识别在使用前绝对未定义的变量,如本例所示

print(x)
x = "Hello, world"

或者这个

print(y)
if random.randint(0,10) == 3:
    y = "ok"

What linting is PyCharm using by default? (I always thought it's pylint under the hood.)

PyCharm 默认使用自己的内部检查库。 PyCharm 在 Java 中实现,它的检查库也是如此。

可以将 Pylint 与 PyCharm 一起使用,但它不是内置的,也不是默认使用的。显示了将 Pylint 配置为外部工具的解决方案 , and there is also a Pylint plugin for PyCharm 可用。