Дополнительно
Как я могу проверить, если значение существует в Python перечисление без использования попробовать/поймать?
Используя класс Python перечисления, есть ли способ проверить, если перечисление содержит конкретное значение, без использования try и Catch?
Со следующим классом:
from enum import Enum
class Fruit(Enum):
Apple = 4
Orange = 5
Pear = 6
Как я могу проверить значение 6 (возвращает true), или значение 7 (возвращая false)?
43
6
тест ## для значений
Вариант 1
обратите внимание, что
перечисление
имеет элемент под названием_value2member_map_
(который без документов и могут быть изменены/удалены в будущей версии Python):вы можете проверить, если значение находится в ваших `перечисление на эту карту:
вариант 2
если вы не хотите, чтобы полагаться на эту функцию, это альтернатива:
или (наверное лучше): использовать
набор
;в
оператор будет более эффективным:затем проверьте с
добавить has_value в вашем классе
затем вы можете добавить этот метод в класс:
тест ## для ключей
если вы хотите проверить имена (а не значения) я хотел бы использовать
_member_names_
:Вы могли бы использовать
перечисление.__члены__
- упорядоченное отображение имен словарь для участников:Просто проверить, будет ли она's в
перечисление. _value2member_map_
Опираясь на то, что Реды Maachi начал:
возвращает true
возвращает false
Дон'т.
Если вы используете enum можно проверить на перечисление с
Но в противном случае, попробуйте.. это подходящие для Python способ проверить перечисления. Действительно, для любой перерыв в утка-типирование парадигмы.
Правильные и подходящие для Python, способ тестирования для int в IntEnum, чтобы дать ему идти и поймать ValueError, если там'ы отказа.
Многие из предложенных выше решений активно осуждается и лишается права на 3,8 (на "DeprecationWarning: использование non-перечисления в проверки герметичности поднимет ошибку TypeError в Python 3.8 и" )
Если вы действительно заинтересованы в сохранении ваш современный код, то вы можете просто использовать
В EAFP версия ответа:
питон попробуйте: Фрукты(Вэл) возвращает true кроме ValueError: возвращает false
Если вы хотите получить объект enum, если это допустимое значение и поднять
ValueError
если нет, то можно просто использовать фрукты(вал)`