Usando la clase Python Enum, ¿hay alguna forma de probar si un Enum contiene un valor int específico sin usar try / catch?
Con la siguiente clase:
from enum import Enum class Fruit(Enum): Apple = 4 Orange = 5 Pear = 6
¿Cómo puedo probar el valor 6 (devolviendo verdadero) o el valor 7 (devolviendo falso)?
Puedes listar los valores de esta manera:
values = [item.value for item in Fruit] # [4, 5, 6]
o (probablemente mejor): usar un set
; El operador será más eficiente:
values = set(item.value for item in Fruit) # {4, 5, 6}
entonces prueba con
5 in values # True 7 in values # False
También podría agregar esto como un método a su clase:
class Fruit(Enum): Apple = 4 Orange = 5 Pear = 6 @classmethod def has_value(cls, value): return any(value == item.value for item in cls) print(Fruit.has_value(5)) # True print(Fruit.has_value(7)) # False
Si quieres probar los nombres (y no los valores), la respuesta de Reda Maachi cubre lo que haría.
Podría usar Enum.__members__
– un diccionario ordenado que Enum.__members__
nombres a los miembros :
In [12]: 'Apple' in Fruit.__members__ Out[12]: True In [13]: 'Grape' in Fruit.__members__ Out[13]: False
Solo verifica si está en Enum. _value2member_map_
Enum. _value2member_map_
In[15]: Fruit._value2member_map_ Out[15]: {4: , 5: , 6: } In[16]: 6 in Fruit._value2member_map_ Out[16]: True In[17]: 7 in Fruit._value2member_map_ Out[17]: False