flake8-忽略功能警告

时间:2018-07-01 21:33:13

标签: python flake8

我试图仅对单个函数忽略警告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
    ^

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

4 个答案:

答案 0 :(得分:0)

摘自mccabe(由flake8使用的文档):

  

要使mccabe报告的违规行为保持沉默,请放置您的# noqa: C901   在函数定义行中,报告了错误的位置   (可能是装饰器)。

因此,您应该在包含# noqa的行或带有装饰符的行上放置def注释。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我可以更好地忽略已知和接受的复杂性,以便捕获并讨论任何未来的回归。接受最高 12 的 McCabe 复杂度的秘诀:

@dsl.pipeline(
    # Default pipeline root. You can override it when submitting the pipeline.
    pipeline_root=PIPELINE_ROOT,
    # A name for the pipeline. Use to determine the pipeline Context.
    name="pipeline-test-1",
)
def pipeline(
serving_container_image_uri: str = "us-docker.pkg.dev/cloud-aiplatform/prediction/tf2-cpu.2-3:latest"
):
    dataset_op = get_data()
    train_op = train_xgb_model(dataset_op.outputs["dataset_train"])
    train_knn = knn_model(dataset_op.outputs["dataset_train"])
    
    eval_op = eval_model(
        test_set=dataset_op.outputs["dataset_test"],
        xgb_model=train_op.outputs["model_artifact"],
        knn_model=train_knn.outputs['best_model_artifact']
    )
    
    endpoint_op = gcc_aip.ModelDeployOp(
    project=PROJECT_ID,
    model=eval_op.outputs["model_artifacts"],
    machine_type="n1-standard-4",
    )
    
    #endpoint_op.after(eval_op)
    
compiler.Compiler().compile(pipeline_func=pipeline,
        package_path='xgb_pipe.json')

答案 3 :(得分:-1)

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

所以我猜这是

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

应该工作。