【问题标题】:Python: `enum.auto()` Generating Warning That Parameter is UnfilledPython:`enum.auto()` 生成参数未填充的警告
【发布时间】:2022-06-15 23:00:30
【问题描述】:

我有以下代码,它定义了一个枚举并使用enum.auto() 为条目提供从 1 开始的生成值:

from enum import Enum, auto


class Colors(Enum):
    RED = auto()
    BLUE = auto()
    YELLOW = auto()


def main():
    print(Colors.RED.value)
    print(Colors.BLUE.value)
    print(Colors.YELLOW.value)


if __name__ == '__main__':
    main()

输出:

1
2
3

代码运行良好,过去没有任何警告,但今天更新 PyCharm 后,我现在收到auto() 的以下警告:

Parameter(s) unfilled 
Possible callees: 
EnumMeta.__call__(cls: Type[_T], value, names: None = ...) 
EnumMeta.__call__(cls: EnumMeta, value: str, names: Union[str, Iterable[str], Iterable[Iterable[str]], Mapping[str, Any]], *, module: Optional[str] = ..., qualname: Optional[str] = ..., type: Optional[type] = ..., start: int = ..., boundary: Optional[FlagBoundary] = ...) 
EnumMeta.__call__(cls: Type[_T], value, names: None = ...) 
EnumMeta.__call__(cls: EnumMeta, value: str, names: Union[str, Iterable[str], Iterable[Iterable[str]], Mapping[str, Any]], *, module: Optional[str] = ..., qualname: Optional[str] = ..., type: Optional[type] = ..., start: int = ...) 

我检查了 Python documentation 但找不到任何相关内容,因为所有示例仍然使用 auto() 没有任何参数。

我认为新警告是因为 PyCharm 正在使用更新的 Python linting 规则。

如何解决此警告?

更新 1:

似乎 PyCharm 将enum.auto() 检测为enum.auto(IntFlag),因此警告参数未填充:

我还会将此问题报告给 PyCharm 开发人员。也许这是一个错误。

更新 2:

没关系,大家。我刚刚发现这是一个错误并在一个月前被报告here.

【问题讨论】:

  • 不确定,但您可以检查您的配置的python版本(右上)“编辑配置”是否与解释器(右下)python interperter中的版本相同。
  • 您使用的是哪个 pycharm 和 python 解释器版本?查看 pycharm 的最新更新更改日志,他们没有更改与 python linting 或枚举相关的任何内容
  • 我正在使用 Python 3.9.6,我的 PyCharm 是 Runtime version: 11.0.14.1+1-b2043.25 amd64,目前是最新的。
  • 将 PyCharm 2021.2.2 与 Python 3.9.0 一起使用,示例代码没有错误或警告。
  • 当我发表评论时,我没有时间进一步检查这一点,但是每当出现MetaEnum (...) Type[_T] linter 警告时,我可以根据经验告诉你这是一个 PyCharm 错误。这些年来,我已经看到这种普遍的警告来来去去。在 JetBrains bugtracker 上找到它的出色侦探工作!

标签: python enums pycharm warnings


【解决方案1】:

没关系,大家。我刚刚发现这是一个错误并在一个月前被报告here.

【讨论】:

    【解决方案2】:

    这是一个 IDE 错误(正如 OP 已经提到的),您应该这样取消警告:

    # noinspection PyArgumentList
    class Colors(Enum):
        RED = auto()
        BLUE = auto()
        YELLOW = auto()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      相关资源
      最近更新 更多