python - 在 Python 枚举中使用自定义 new 时出现 ValueError

标签 python enums

我在以下 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/

相关文章:

python - 有没有更简单的方法来分配字典并循环更新?

python - 如何改进这个 django View 代码?

C++ 将多个字符串更改为一个枚举

android - 在 Android 客户端上使用 Cloud Endpoint 模型中包含的枚举

c++ - Unresolved external - 静态类中的枚举

python - 为什么 Pocket API 总是返回 403 Forbidden?

python - 填充源 - 目标对和列表中的标志

python - 如何使用无效的 Django 表单跳转到 anchor ?

c - 如何检索枚举类型变量中的元素?

c++ - 嵌套枚举的前向声明