【问题标题】:How to limit choices for pydantic using Enum如何使用 Enum 限制 pydantic 的选择
【发布时间】:2021-07-04 12:46:20
【问题描述】:

我得到了下一个枚举选项:

class ModeEnum(str, Enum):
""" mode """

    map = "map"
    cluster = "cluster"
    region = "region"

这个枚举用于两个 Pydantic 数据结构。 在一个数据结构中,我需要所有 Enum 选项。 在其他数据结构中,我需要排除region。 如果我为此使用自定义验证并尝试输入一些 other 值,标准验证错误消息会通知,允许的值都是三个。

那么在这种情况下最好的决定是什么?

附: 我在ModeEnum 中使用map 变量。不好吗?我无法想象它可以覆盖内置 map 对象的情况,但是,可以吗?

【问题讨论】:

  • 在实践中,覆盖内置变量是不好的,将其重命名为 map_ 或类似的东西
  • 您的 map 成员不在全局名称空间中,并且没有覆盖 map 内置函数,因此使用该名称没有问题。一般来说,覆盖内置名称很好,特别是如果您不使用内置名称。

标签: python enums pydantic


【解决方案1】:

这有点小技巧,但如果你用pre=True 标记你的验证器,你应该能够强制它首先运行,然后你可以使用允许的值抛出一个自定义错误。

【讨论】:

  • 谢谢。我看到没有简单的决定。似乎将两个单独的 Enum 类分开会更清楚。
猜你喜欢
  • 2020-11-23
  • 2021-12-01
  • 2019-02-20
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 2022-01-16
相关资源
最近更新 更多