-1

在这个测试程序上:

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) CPython 3.8.2 on Linux (WSL2)

4

1 回答 1

1

开箱即用的 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 维护者(这很可能会实现)

于 2021-08-31T01:46:45.113 回答