Сообщить об ошибке.

Класс FlagBoundary() модуля enum в Python

Обработка недопустимых значений в перечислениях Python

Класс enum.FlagBoundary управляет тем, как обрабатываются недопустимые значения в перечислении enum.Flag и его подклассах.

Добавлен в Python 3.11.

STRICT:

Значения вне допустимого диапазона приводят к возникновению ошибки ValueError. Это значение по умолчанию для enum.Flag:

from enum import Flag, STRICT

class StrictFlag(Flag, boundary=STRICT):
    RED = auto()
    GREEN = auto()
    BLUE = auto()

>>> StrictFlag(2**2 + 2**4)
# Traceback (most recent call last):
# ...
# ValueError: <flag 'StrictFlag'> invalid value 20
#     given 0b0 10100
#   allowed 0b0 00111

CONFORM:

Недопустимые значения, выходящие за пределы допустимого диапазона, будут удалены. Остаются только действительные значение Flag:

from enum import Flag, CONFORM

class ConformFlag(Flag, boundary=CONFORM):
    RED = auto()
    GREEN = auto()
    BLUE = auto()

>>> ConformFlag(2**2 + 2**4)
# <ConformFlag.BLUE: 4>

EJECT:

Значения вне диапазона теряют принадлежность к флагу и возвращаются к типу int. Это значение по умолчанию для enum.IntFlag:

from enum import Flag, EJECT

class EjectFlag(Flag, boundary=EJECT):
    RED = auto()
    GREEN = auto()
    BLUE = auto()

>>> EjectFlag(2**2 + 2**4)
# 20

KEEP:

Значения вне допустимого диапазона сохраняются, а принадлежность к флагу сохраняется. Это используется для некоторых флагов stdlib:

from enum import Flag, KEEP

class KeepFlag(Flag, boundary=KEEP):
    RED = auto()
    GREEN = auto()
    BLUE = auto()

>>> KeepFlag(2**2 + 2**4)
# <KeepFlag.BLUE|16: 20>