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很难解决这个问题。
我不介意手动添加类型提示来解决问题,我只是不确定是什么和在哪里。
答案 0 :(得分:1)
也许这不是最干净的解决方案,但以下对我有用:
from enum import Enum
import typing
class Color(Enum):
RED = 0
BLUE = 1
Color = Color # type: typing.Union[typing.Type[Color], typing.Iterable]
PyCharm supports类型提示使用PEP 484中定义的格式(对于低于3.5版本的Python版本以注释形式,对于3.5版本及更高版本的注释形式)。
此处的重要说明是,在低于3.5的Python版本上,应以某种方式保护typing
模块的导入(PyCharm认为此导入是有效的,即使未在站点软件包中安装typing
模块,但是在运行代码时发生ImportError
。
答案 1 :(得分:0)
我在PyCharm中使用的一种解决方法是将__members__
与.items()
一起使用
from enum import Enum
class Color(Enum):
RED = 0
BLUE = 1
for name, color in Color.__members__.items():
print(name, color)
返回:
('RED', <Color.RED: 0>)
('BLUE', <Color.BLUE: 1>)
请参阅以下链接以供参考:
https://cpython-test-docs.readthedocs.io/en/latest/library/enum.html#iteration