Ключевой вопрос здесь - что должно произойти, если msg_type
недействительноНапример, либо из-за ошибки, либо из-за повреждения msg_type == 'z'
.
Если исключение подходит, то проще всего его получить с помощью
msg_type = MsgType(msg_type)
, который сгенерирует ValueError
для недопустимых значений, и вы можете либо немедленно разобраться с этим:
try:
msg_type = MsgType(msg_type)
# your if...elif...else here
except ValueError:
# handle problem here
, либо позволить ему перейти к более высокой функции.
Если вы не хотите / нуждаетесь в исключениях, тогда другойОбходное сравнение с MsgType.LOGON.value
означает, что MsgType
Enum
также является производным от str
:
class MsgType(str, Enum):
# definitions here
Тогда в вашем коде вы можете сказать:
if msg_type == 'A':
# stuff
без преобразования msg_type
в MsgType
.
Я предпочитаю первый метод (не смешивать в str
и не выполнять преобразование), если вы не добавляете Enum
к существующемукодовая база и LOGON
, HEARTBEAT
и т. д. являются константами и уже используются в других местах.
Обратите внимание, что даже со вторым методом вы все равно можете использовать MsgType(msg_type)
, чтобы вызвать исключение ValueError
, если вынадо.