我有这样的枚举
@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"
问题是它工作不正常。
答案 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