如何设置 flake8 来捕获不可调用的?

How to set flake8 to catch a not-callable?

关于这个测试程序:

def func():
    foo = (
        (1, 2)
        (3, 4)
    )

命令 python -m py_compile my_script.py 警告“SyntaxWarning:'tuple' 对象不可调用;也许您漏掉了一个逗号?” pylint --disable=all --enable=E1102 my_script.py 输出“E1102: (1, 2) is not callable (not-callable)”。

但是 flake8 没有显示任何错误或警告。我如何设置它来捕获(输出或警告)不可调用的声明?

我正在使用:

3.7.9(mccabe:0.6.1,pycodestyle:2.5.0,pyflakes:2.1.1)Linux (WSL2)

上的 CPython 3.8.2

开箱即用的 flake8 无法捕获特定的 SyntaxWarning

但是你可以直接使用标准库来捕捉这个:

$ python3 -Werror -m compileall t.py
Compiling 't.py'...
***   File "t.py", line 3
    (1, 2)
    ^
SyntaxError: 'tuple' object is not callable; perhaps you missed a comma?

通常你也可以通过提高警告级别将 SyntaxWarnings 变成 SyntaxErrors,但无论出于何种原因,它似乎对这个警告不起作用(可能是因为这个警告是在 compile 时间而不是 parse次):

$ python3 -Werror -c 'import ast; ast.parse("def f():()()")'
$

否则你可以用 PYTHONWARNINGS=error::SyntaxWarning flake8 ... 触发它(但遗憾的是,你不能)


免责声明:我是当前的 flake8 维护者和 pyflakes 维护者(这可能会得到实施)