【问题标题】:flake8 disable linter only for a block of codeflake8 仅对代码块禁用 linter
【发布时间】:2020-10-19 13:52:05
【问题描述】:

我在 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

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

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

我想对文件的其余部分进行 lint,但我不能在每个 fieldx 的末尾加上 # noqa: E501

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

【问题讨论】:

  • 不过,特别是如果它只是一个测试,那些字符串需要那么长吗?
  • 是的,因为我想从旧项目中复制粘贴该 JSON,而且我不想浪费时间删除字符或拆分行。通常,JSON 是相同的,但我可能需要替换为另一个

标签: python flake8


【解决方案1】:

flake8 中没有办法忽略代码块

您的选择是:

  1. 通过将# noqa: E501 放在上面来忽略产生错误的每一行

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

  3. 使用per-file-ignores忽略整个文件中的E501

    [flake8]
    per-file-ignores =
         path/to/file.py: E501
    

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


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

【讨论】:

  • 决定不实现此功能的原因是什么?
  • 复杂性,YAGNI
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 2018-11-12
  • 1970-01-01
  • 2016-02-13
相关资源
最近更新 更多