PyCharm类型暗示枚举迭代

Het*_*oni 9 python enums type-hinting pycharm

Python的枚举类支持迭代,但PyCharm很难搞清楚这一点.

from enum import Enum

class Color(Enum):
    RED = 0
    BLUE = 1

for color in Color:
    # Warning: Expected 'collections.Iterable', got 'Type[Color]' instead
    print(color)
Run Code Online (Sandbox Code Playgroud)

虽然这种方法EnumMeta.__iter__存在,但PyCharm很难解决这个问题.

我不介意手动添加类型提示来解决问题,我只是不确定什么和在哪里.

bar*_*tem 7

也许这不是最干净的解决方案,但以下对我有用:

from enum import Enum
import typing

class Color(Enum):
    RED = 0
    BLUE = 1

Color = Color  # type: typing.Union[typing.Type[Color], typing.Iterable]
Run Code Online (Sandbox Code Playgroud)

PyCharm支持使用PEP 484中定义的格式进行类型提示(对于低于 3.5 的 Python 版本以注释的形式,对于 3.5 及更高版本以注释的形式)。

这里重要的注意事项是,在低于 3.5 的 Python 版本上,typing应以某种方式保护导入模块(PyCharm 会识别此导入有效,即使没有typing在站点包中安装模块,但是在代码运行时ImportError发生)。