Я пытаюсь настроить Enum, который будет возвращать None
, если значение не найдено. В документации упоминается функция _missing_
, но не объясняются какие-либо подробности относительно этой функции:
_missing_
- функция поиска, используемая, когда значение не найдено ; может быть переопределено
После некоторого осмотра, похоже, что это classmethod
с подписью cls, value
, поэтому я попытался настроить его, и он не работает.
>>> class G(enum.Enum):
... @classmethod
... def _missing_(cls, value):
... return None
... a = 1
...
>>> G(1)
<G.a: 1>
>>> G(2)
Traceback (most recent call last):
...
ValueError: 2 is not a valid G
>>> G['b']
KeyError: 'b'
>>> G.b
AttributeError: b
Поиск в Google предполагает, что _missing_
перехватывает только ValueError в случае вызова, поэтому KeyError и TypeError меня не удивляют, но я не знаю, почему G(2)
вызывает ValueError вместо возврата None
.