PyCharm 类型提示枚举迭代
PyCharm type hinting enum iteration
Python 的枚举 class 支持迭代,但 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 无法解决这个问题。
我不介意手动添加类型提示来解决这个问题,我只是不确定是什么和在哪里。
也许这不是最干净的解决方案,但以下对我有用:
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 type hinting using format defined in PEP 484(Python 3.5以下版本以注释形式,3.5及以上版本以注释形式)。
这里要注意的是,在低于 3.5 的 Python 版本上,导入 typing
模块应该以某种方式加以保护(PyCharm 认为这个导入是有效的,即使没有 typing
模块安装在站点包中,但是当代码为 运行 时会出现 ImportError
)。
我在 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>)
参考以下link:
https://cpython-test-docs.readthedocs.io/en/latest/library/enum.html#iteration
Python 的枚举 class 支持迭代,但 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 无法解决这个问题。
我不介意手动添加类型提示来解决这个问题,我只是不确定是什么和在哪里。
也许这不是最干净的解决方案,但以下对我有用:
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 type hinting using format defined in PEP 484(Python 3.5以下版本以注释形式,3.5及以上版本以注释形式)。
这里要注意的是,在低于 3.5 的 Python 版本上,导入 typing
模块应该以某种方式加以保护(PyCharm 认为这个导入是有效的,即使没有 typing
模块安装在站点包中,但是当代码为 运行 时会出现 ImportError
)。
我在 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>)
参考以下link:
https://cpython-test-docs.readthedocs.io/en/latest/library/enum.html#iteration