PyCharm类型提示枚举迭代

20

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)
虽然方法EnumMeta.__iter__存在,但PyCharm在解析时存在问题。 我不介意手动添加类型提示来解决问题,只是不确定应该在哪里添加和添加什么。

Pycharm似乎没有给我任何警告,版本是2017.2.4。 - eugenhu
我有相同的版本。也许你的“代码兼容性检查”设置不同?我的已经勾选了2.7和3.6。 - Hetzroni
我已经启用了它,但仍然没有收到警告,我的类型检查似乎工作正常(for color in 10:将显示警告)。 - eugenhu
你是否正在使用enum34的后移版本? - user2235698
1
PyCharm 2017.3.3存在相同的问题。 - ying
1
这是PyCharm中的一个错误。 - Mattwmaster58
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
7
也许这不是最干净的解决方案,但以下方法适用于我:
from enum import Enum
import typing

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

Color = Color  # type: typing.Union[typing.Type[Color], typing.Iterable]

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

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


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,