我试图仅对单个函数忽略警告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
^
快速搜索仅产生如何全局忽略或整个文件忽略的方式。这不是我想要的,因为如果文件太复杂,我确实想捕获文件中的其他功能。有谁知道我该如何解决我的问题?
答案 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(...): ...
应该工作。