我在以下 Python 代码中遇到了一个问题,当尝试创建一个 Enum 实例,该实例的值与任何已定义的枚举成员不对应时,会引发 ValueError:
from enum import Enum
class Option(Enum):
OPTION_1 = "Option 1"
OPTION_2 = "Option 2"
NONE = ""
def __new__(cls, value):
try:
obj = object.__new__(cls)
obj._value_ = value
return obj
except ValueError:
return Option.NONE
tmp = Option("Option 3")
ValueError 似乎与 __new__
方法处理无效值的方式有关。我希望代码创建 NONE
成员的实例,以防提供无效值,但它似乎没有按预期工作。
为什么此代码会导致 ValueError 以及如何实现使用 NONE
成员获取无效值的所需行为?
最佳答案
__new__
方法在枚举类创建期间使用;在 Enum.__new__
被交换之后,它只进行查找。
要处理此类情况,请使用 _missing_
方法:
@classmethod
def _missing_(cls, value):
return cls.NONE
披露:我是 Python stdlib Enum
的作者,enum34
backport ,以及 Advanced Enumeration (aenum
)图书馆。
关于python - 在 Python 枚举中使用自定义 new 时出现 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76886238/