La clase de enumeración de Python admite la iteración, pero PyCharm tiene problemas para resolver esto.
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) Aunque existe el método EnumMeta.__iter__ , PyCharm tiene problemas para resolver esto.
No me importa agregar manualmente sugerencias de tipo para solucionar el problema, simplemente no estoy seguro de qué y dónde.
Tal vez no sea la solución más limpia, pero lo siguiente funciona para mí:
from enum import Enum import typing class Color(Enum): RED = 0 BLUE = 1 Color = Color # type: typing.Union[typing.Type[Color], typing.Iterable]PyCharm admite sugerencias de tipo utilizando el formato definido en PEP 484 (para versiones de Python inferiores a 3.5 en forma de comentarios, para versiones 3.5 y superiores en forma de anotaciones).
Una nota importante aquí es que en la versión de Python anterior a la 3.5, la importación del módulo de typing debe protegerse de alguna manera (PyCharm reconoce esta importación como válida, incluso sin tener el módulo de typing instalado en los paquetes del sitio; sin embargo, cuando se ejecuta el código, ocurre ImportError ).
Una solución que utilicé en PyCharm fue mediante el uso de __members__ con .items()
from enum import Enum class Color(Enum): RED = 0 BLUE = 1 for name, color in Color.__members__.items(): print(name, color)Volviendo:
('RED', <Color.RED: 0>) ('BLUE', <Color.BLUE: 1>)Consulte el siguiente enlace como referencia:
https://cpython-test-docs.readthedocs.io/en/latest/library/enum.html#iteration