关于pyflakes和noqa的评论,我有些奇怪的地方。
我有一个类似于以下类(MyExample)的类:
pyflakes_f811_test的目录中的唯一文件。abc.ABC。typing.overload重载类中的方法。从命令行消息redefinition of unused 'enter_yes_no' from line 25调用pyflakes。因此,我添加了# 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发布于 2020-04-02 19:18:35
Pyflake不支持忽略特定行的noqa注释。您可以在他们的源代码https://github.com/PyCQA/pyflakes中检查,没有提到noqa。noqa特性只存在于flake8中。由于flake8使用Pyflake,我建议您切换到flake8:
pip install flake8
flake8 ./pyflakes_f811_overload.py对于@overload装饰器的特殊问题,虽然它已经在主分支(#435)中得到了修复,但它还没有发布(截止到2020年4月02号)。
https://stackoverflow.com/questions/60938927
复制相似问题