【问题标题】:How to get flake8 to catch a not-callable?如何让 flake8 捕捉不可调用的?
【发布时间】:2021-08-31 01:20:02
【问题描述】:

关于这个测试程序:

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)

【问题讨论】:

  • @wim 我已经知道了。我正在寻找一种使用 flake8 获取相同消息的方法,因为它是我的 CI/CD 管道的一部分

标签: python-3.x lint flake8 pyflakes


【解决方案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 维护者(这很可能会实现)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    相关资源
    最近更新 更多