Python: pyflakes не интерпретирует комментарий noqa - PullRequest
0 голосов
/ 30 марта 2020

У меня есть что-то странное с комментариями pyflakes и noqa.

У меня есть класс, подобный приведенному ниже (MyExample):

  • Это единственный файл в каталоге с именем pyflakes_f811_test.
  • Он наследуется только от abc.ABC.
  • Я использую typing.overload для перегрузки метода в классе.

Вызов pyflakes из сообщений командной строки redefinition of unused 'enter_yes_no' from line 25. Таким образом, я добавил в # noqa: F811 комментарии, но сообщения не go прочь.

Мои вопросы :

  • Кто-нибудь знает, что происходит здесь?
  • Есть ли какие-либо известные причины, по которым это может произойти?
  • Есть ли какие-либо советы по отладке этого?

Исходный код

Имя: 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

1 Ответ

1 голос
/ 02 апреля 2020

Pyflakes не поддерживает комментарии noqa для игнорирования указанных c строк. Вы можете проверить в их исходном коде https://github.com/PyCQA/pyflakes, что нет упоминания noqa. Функция noqa доступна только в flake8 . Поскольку flake8 использует Pyflakes, я предлагаю вам переключиться на flake8:

pip install flake8
flake8 ./pyflakes_f811_overload.py

Для вашей конкретной проблемы с декоратором @overload, хотя она была исправлена ​​в основной ветке ( # 435 ) , он еще не выпущен (по состоянию на 02 апреля / 2020).

...