close

How do I test if int value exists in Python Enum without using try/catch?

Hello Guys, How are you all? Hope You all Are Fine. Today We Are Going To learn about How do I test if int value exists in Python Enum without using try/catch in Python. So Here I am Explain to you all the possible Methods here.

Without wasting your time, Let’s start This Article.

How do I test if int value exists in Python Enum without using try/catch?

  1. How do I test if int value exists in Python Enum without using try/catch?

    If the enum has many members, this approach can be faster because it doesn't make a new list and stops walking the enum when the given value is found:

  2. test if int value exists in Python Enum without using try/catch

    If the enum has many members, this approach can be faster because it doesn't make a new list and stops walking the enum when the given value is found:

Method 1

test for values

variant 1

note that an Enum has a member called _value2member_map_ (which is undocumented and may be changed/removed in future python versions):

print(Fruit._value2member_map_)
# {4: <Fruit.Apple: 4>, 5: <Fruit.Orange: 5>, 6: <Fruit.Pear: 6>}

you can test if a value is in your Enum against this map:

5 in Fruit._value2member_map_  # True
7 in Fruit._value2member_map_  # False

variant 2

if you do not want to rely on this feature this is an alternative:

values = [item.value for item in Fruit]  # [4, 5, 6]

or (probably better): use a set; the in operator will be more efficient:

values = set(item.value for item in Fruit)  # {4, 5, 6}

then test with

5 in values  # True
7 in values  # False

add has_value to your class

you could then add this as a method to your class:

class Fruit(Enum):
    Apple = 4
    Orange = 5
    Pear = 6

    @classmethod
    def has_value(cls, value):
        return value in cls._value2member_map_ 

print(Fruit.has_value(5))  # True
print(Fruit.has_value(7))  # False

test for keys

if you want to test for the names (and not the values) i would use _member_names_:

'Apple' in Fruit._member_names_  # True
'Mango' in Fruit._member_names_  # False

Method 2

If the enum has many members, this approach can be faster because it doesn’t make a new list and stops walking the enum when the given value is found:

any(x.value == 5 for x in Fruit)  # True
any(x.value == 7 for x in Fruit)  # False

Summery

It’s all About this issue. Hope all Methods helped you a lot. Comment below Your thoughts and your queries. Also, Comment below which Method worked for you? Thank You.

Also, Read