'how to check if a variable is of type enum in python

I have an enum like this

@enum.unique
class TransactionTypes(enum.IntEnum):
    authorisation = 1
    balance_adjustment = 2
    chargeback = 3
    auth_reversal = 4

Now i am assigning a variable with this enum like this

a = TransactionTypes

I want to check for the type of 'a' and do something if its an enum and something else, if its not an enum

I tried something like this

if type(a) == enum:
    print "do enum related stuff"
else:
    print "do something else"

The problem is it is not working fine.



Solution 1:[1]

reliable solution:

from enum import IntEnum
from collections import Iterable

def is_IntEnum(obj):
    try:
        return isinstance(obj, Iterable) and isinstance (next(iter(obj)), IntEnum)
    except:
        return False # Handle StopIteration, if obj has no elements

Solution 2:[2]

I thought I`ve got a ugly way. eg:

print(o.__class__.__class__) 

Output:

<enum.EnumMeta>

Solution 3:[3]

as mentioned use isinstance method to check weather an instance is of enum.Enum type or not.

A small working code for demonstration of its usage:

import enum


class STATUS(enum.Enum):
    FINISHED = enum.auto()
    DELETED = enum.auto()
    CANCELLED = enum.auto()
    PENDING = enum.auto()


if __name__ == "__main__":
    instance = STATUS.CANCELLED

    if isinstance(instance, enum.Enum):
        print('name : ', instance.name, ' value : ', instance.value)
    else:
        print(str(instance))

Output:

name :  CANCELLED  value :  3

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 S.B
Solution 3 Udesh Ranjan