【问题标题】:flake8 - ignore warnings for a functionflake8 - 忽略函数的警告
【发布时间】:2018-07-01 21:33:12
【问题描述】:

我试图忽略警告C901 too complex 仅针对单个功能。我已经尝试过几乎可以看到# noqa: C901 的排列,但仍然出现错误。我认为函数(方法?)上方的# noqa 注释就足够了。我什至尝试将注释与def 声明放在同一行,如下所示:

class Klass():

    def my_complex_method(self):  # noqa: C901
        """
        lots of if's and return's
        """

这是我从flake8 收到的消息的示例:

src/test/_resource.py:147:5: C901 'Resource.render' is too complex (22)
    def render(self, request):  # noqa: C901
    ^

快速搜索只会产生如何忽略全局或整个文件。这不是我想要的,因为如果文件太复杂,我确实想捕获文件中的其他函数。有谁知道我该如何解决我的问题?

【问题讨论】:

  • 您可以忽略特定行的错误,但您必须将# noqa 注释放在引发错误的行上,这可能不是def 行。
  • @kindall 据我所知,它在def 线上。我已经用我从 flake8 得到的示例更新了这个问题。
  • 你的函数有装饰器吗?我通过将# noqa 注释放在装饰器的行上而不是包含def 的行上来禁用此警告。

标签: python flake8


【解决方案1】:

来自mccabe 上的文档(flake8 在后台使用):

要消除mccabe 报告的违规行为,请将您的# noqa: C901 在报告错误的函数定义行上 (可能是装饰者)。

所以你应该将# noqa 注释放在包含def 的行或带有装饰器的行上。

【讨论】:

  • 注意:# flake8: noqa: C901 在函数装饰器行报告违规的情况下将不起作用,因此请确保只使用# noqa: C901
【解决方案2】:

在搜索其他错误时,对我有用的是将其添加前缀 flake8

所以我猜是这样的:

# flake8: noqa: C901
def somefn(...): ...

应该可以。

【讨论】:

  • 虽然这在技术上确实有效,但它似乎禁用了整个文件的所有 Flake8 错误。
  • 它将禁用所有错误。应该是def somefn(...): # noqa: C901
【解决方案3】:

我最好忽略已知和公认的复杂性,以便捕获并讨论任何未来的回归。接受高达 12 的 McCabe 复杂度的方法:

def my_complex_function () # noqa: max-complexity: 13
    pass

【讨论】:

    【解决方案4】:

    请注意,如果您的方法不是全部在一行,# noqa 将出现在方法的第一行,如下所示:

    def my_method(  # noqa: C901
        self,
        variable_name: str = None,
        variable_int: int = None,
        variable_list: list = None,
    ):
    

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2010-10-07
      相关资源
      最近更新 更多