如何在python中检查变量是否为enum类型

时间:2016-07-15 10:32:21

标签: python-2.7 enums typechecking

我有这样的枚举

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

现在我正在为此枚举分配一个变量,如此

a = TransactionTypes

我想检查'a'的类型,如果它是枚举和其他东西,如果它不是枚举,那就做点什么

我试过这样的事情

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

问题是它工作不正常。

2 个答案:

答案 0 :(得分:20)

  

现在我正在为此枚举分配一个变量,如此

a = TransactionTypes

我希望你不是,因为你刚刚分配给a的是整个枚举,而不是其中一个成员(例如TransactionTypes.chargeback)如果这真的是你想要的那么,正确的测试将是:

if issubclass(a, enum.Enum)

但是,如果您实际上意味着:

a = TransactionTypes.authorisation

然后你需要的测试是:

# for any Enum member
if isinstance(a, Enum):

# for a TransactionTypes Enum
if isinstance(a, TransactionTypes):

答案 1 :(得分:-1)

可靠的解决方案:

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