flake8 仅对代码块禁用 linter

Rui*_*ins 2 python flake8

我在 python 中有一个文件,如:

def test_constructor_for_legacy_json():
    """Test if constructor works for a legacy JSON in an old database"""

    a = A(**{
        'field1': 'BIG TEXT WITH MORE THAN 500 CHARACTERS....(...)',
        'field2': 'BIG TEXT WITH MORE THAN 500 CHARACTERS....(...)',
        'field3': 'BIG TEXT WITH MORE THAN 500 CHARACTERS....(...)',
        # (...)
        'field1000': 'BIG TEXT WITH MORE THAN 500 CHARACTERS....(...)',
    })

    assert type(a) == A
Run Code Online (Sandbox Code Playgroud)

当我运行flake8+hacking我收到一个错误,因为行太大了。

如果我将此命令放在文件的开头,# flake8: noqa所有文件都将被 linter 忽略。但我只想从 linter 中排除a声明的块。

我想皮棉文件的其余部分,我不能在每个月底建成fieldx# noqa: E501

有人知道我该如何解决这个问题?谢谢

Ant*_*ile 9

flake8 没有办法忽略代码块

您的选择是:

  1. 忽略每个通过将产生错误线# noqa: E501在其上

  2. 忽略整个文件(但这也会关闭所有其他错误),# flake8: noqa单独一行

  3. E501通过使用忽略整个文件per-file-ignores

    [flake8]
    per-file-ignores =
         path/to/file.py: E501
    
    Run Code Online (Sandbox Code Playgroud)

通常我更喜欢第三个,甚至可能将你的长字符串隔离到他们自己的文件中以被忽略


免责声明:我是当前的 flake8 维护者

  • 当很明显很多人“确实”需要它时,争论 YAGNI 是很奇怪的。关于复杂性,在每行和每文件忽略之间是否可以有一个更简单的折衷方案,例如单独的指令来禁用或启用文件其余部分的 lint? (34认同)
  • 列出的三种方法都不能满足人们的需求,而答案也首先承认没有办法满足人们的需求:“在 flake8 中没有办法忽略代码块”。 (30认同)
  • 决定不实现此功能的原因是什么? (17认同)
  • 请不要,谢谢——我会将其关闭,作为同一件事的其他请求的重复项 (3认同)
  • 我们是否可以忽略特定规则,例如整个文件的 E501,并在文件中添加注释,而不使用单独的配置文件? (3认同)
  • 好吧,我试图简化情况;但实际上我们有很多此类文件。最好将表格放在与其对应的代码旁边。我们使用这两种工具,它们应该相辅相成,不是吗? (3认同)
  • 当我必须将方法的签名放在该方法的文档字符串的第一行中时,我遇到了这个问题,因为自动文档生成的签名无法构建(未知参考)。如果我将签名拆分为多行,或者尝试忽略该行的 501,Sphinx 将拒绝构建。这让我不得不忽略整个文件的 501。当然,修复损坏的引用是一个更好的解决方案,但它是第三方的,所以并不简单。所以 YGNI 对于极其复杂的案件...... (2认同)