Python:pyflakes不解释noqa注释

2024-10-01 19:25:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我对pyflakesnoqa的评论有些奇怪

我有一个类似于下面的类(MyExample):

  • 它是名为pyflakes_f811_test的目录中唯一的文件
  • 它只从abc.ABC继承
  • 我使用typing.overload重载类中的方法

从命令行消息调用pyflakesredefinition of unused 'enter_yes_no' from line 25。因此,我添加了# noqa: F811注释,但消息不会消失

我的问题

  • 有人知道这里发生了什么吗
  • 是否有任何已知的原因会发生这种情况
  • 关于调试这个有什么提示吗

源代码

姓名:pyflakes_f811_overload.py

#!/usr/bin/env python3

"""Testing pyflakes F811."""


from abc import ABC
from enum import Enum
from typing import overload, Union


class YesNoOptions(Enum):
    """Enum representing basic states of a yes/no."""

    YES = "YES"
    NO = "NO"


class MyExample(ABC):  # pylint: disable=too-few-public-methods
    """Example class."""

    # pylint: disable=no-self-use
    @overload
    def enter_yes_no(self, input_: YesNoOptions):
        """Enter yes/no using an enum."""
        ...

    # pylint: disable=no-self-use
    @overload  # noqa: F811
    def enter_yes_no(self, input_: str):
        """Enter yes/no using a string."""
        ...

    def enter_yes_no(self, input_: Union[YesNoOptions, str]):  # noqa: F811
        """Enter yes/no."""
        if isinstance(input_, str):
            parsed_input = input_.upper()
        elif isinstance(input_, YesNoOptions):
            parsed_input = input_.value
        else:
            raise NotImplementedError(
                f"Did not implement yes/no parsing for input {repr(input_)} of "
                f"type {type(input_)}."
            )

        print(f"User entered: {parsed_input}")


复制

pyflakes通过命令行调用,如下所示:

(pyflakes_venv) ➜  pyflakes_f811_test pyflakes ./pyflakes_f811_overload.py
./pyflakes_f811_overload.py:28: redefinition of unused 'enter_yes_no' from line 22
./pyflakes_f811_overload.py:33: redefinition of unused 'enter_yes_no' from line 28

软件包版本:

python==3.6.5
pycodestyle==2.4.0
pyflakes==2.1.1
prospector==1.2.0

Tags: ofnofrompyselfinputpyflakesyes
1条回答
网友
1楼 · 发布于 2024-10-01 19:25:48

Pyflakes不支持用于忽略特定行的noqa注释。您可以在他们的源代码https://github.com/PyCQA/pyflakes中检查是否没有提到noqanoqa功能仅在flake8中。由于flake8使用Pyflakes,我建议您切换到flake8:

pip install flake8
flake8 ./pyflakes_f811_overload.py

对于@overload装饰器的特殊问题,尽管它已在主分支(#435)中修复,但尚未发布(截至2020年4月2日)

相关问题 更多 >

    热门问题