¿Cómo puedo probar si existe un valor int en Python Enum sin usar try / catch?

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