1

我有一些奇怪的事情pyflakesnoqa评论。

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

  • 它是一个名为pyflakes_f811_test.
  • 它只继承自abc.ABC.
  • typing.overload用来重载类中的方法。

从命令行消息调用 pyflakes redefinition 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
4

1 回答 1

2

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

pip install flake8
flake8 ./pyflakes_f811_overload.py

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

于 2020-04-02T19:18:35.680 回答