从字符串数组初始化pydantic Literal

西尔维奥·梅西(Silvio Messenger)

我想从一系列字符串中初始化化dan字面量

from typing import Literal
from pydantic import BaseModel

CLASS_NAME_VALUES = ["primary", "secondary", "success", "danger", "warning", "info", "dark"]
ICON_NAME_VALUES = ["electricity.svg", "water.svg",
                    "internet.svg", "naturalGas.svg", "noCategory.svg"]

class CategoryRequest(BaseModel):
    class_name: Literal[CLASS_NAME_VALUES]
    icon_name: Literal[ICON_NAME_VALUES]

但我收到以下错误

  File "pydantic/main.py", line 252, in pydantic.main.ModelMetaclass.__new__
  File "pydantic/fields.py", line 309, in pydantic.fields.ModelField.infer
  File "pydantic/fields.py", line 271, in pydantic.fields.ModelField.__init__
  File "pydantic/fields.py", line 351, in pydantic.fields.ModelField.prepare
  File "pydantic/fields.py", line 529, in pydantic.fields.ModelField.populate_validators
  File "pydantic/validators.py", line 566, in find_validators
  File "pydantic/validators.py", line 410, in pydantic.validators.make_literal_validator
TypeError: unhashable type: 'list'

有什么建议吗?

alex_noname

在运行时,允许使用任意值作为类型参数Literal[...],但类型检查器可能会施加限制。例如,mypy仅允许一个或更多个文字boolintstrbytesenum的值,None和别名到其他Literal类型。例如,Literal[3 + 4]List[(3, 4)]不允许。

至于pydantic,它允许在中使用可哈希类型的值Literal,如tuple例如,可以使用以下示例重写您的示例tuple

from typing import Literal
from pydantic import BaseModel

CLASS_NAME_VALUES = ("primary", "secondary", "success", "danger", "warning", "info", "dark")
ICON_NAME_VALUES = ("electricity.svg", "water.svg",
                    "internet.svg", "naturalGas.svg", "noCategory.svg")


class CategoryRequest(BaseModel):
    class_name: Literal[CLASS_NAME_VALUES]
    icon_name: Literal[ICON_NAME_VALUES]

但是我强烈建议您不要使用这种语法,而应遵循规范的语法,类型检查器也允许这样做:

CLASS_NAME_VALUES = Literal["primary", "secondary", "success", "danger", "warning", "info", "dark"]
ICON_NAME_VALUES = Literal["electricity.svg", "water.svg",
                    "internet.svg", "naturalGas.svg", "noCategory.svg"]


class CategoryRequest(BaseModel):
    class_name: CLASS_NAME_VALUES
    icon_name: ICON_NAME_VALUES

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从GetEnv和Literal初始化Ada无界字符串

来自分类Dev

字符串数组初始化

来自分类Dev

字符数组的初始化字符串太长错误

来自分类Dev

字符数组的初始化字符串太长C

来自分类Dev

用字符串变量初始化字符数组

来自分类Dev

使用String Literal Pool初始化的String变量

来自分类Dev

Jasmin字符串声明/初始化错误数组

来自分类Dev

C ++中的数组初始化(不是字符串)

来自分类Dev

在类函数中初始化字符串数组

来自分类Dev

C ++初始化字符串数组

来自分类Dev

在C中动态初始化字符串数组

来自分类Dev

Jasmin字符串声明/初始化错误数组

来自分类Dev

用\ 0初始化字符串数组

来自分类Dev

初始化向量字符串数组时出错

来自分类Dev

使用标量初始化程序初始化字符串数组

来自分类Dev

从字符串数组资源初始化字符串数组

来自分类Dev

如何初始化字符串?

来自分类Dev

用字符串数组初始化二维char数组

来自分类Dev

不确定如何使用字符串数组初始化一维char数组

来自分类Dev

通过字符串引用数组元素,并在awk中初始化数组

来自分类Dev

是否可以使用条件选择的字符串文字初始化字符数组?

来自分类Dev

字符字符串数组的初始化程序中的问题

来自分类Dev

关于存储持续时间的数组初始化(字符、字符串、其他)的差异

来自分类Dev

将char数组初始化为字符串值,未初始化的索引是否设置为null?

来自分类Dev

警告:数组“字母”由带括号的字符串文字初始化

来自分类Dev

无法从成员变量的初始化字符串推断数组大小的原因是什么?

来自分类Dev

C ++多维字符串数组初始化(std :: map)

来自分类Dev

使用大小的推导,char数组的初始化字符串太长

来自分类Dev

如何在C ++中使用字符串文字初始化char的动态数组?

Related 相关文章

  1. 1

    如何从GetEnv和Literal初始化Ada无界字符串

  2. 2

    字符串数组初始化

  3. 3

    字符数组的初始化字符串太长错误

  4. 4

    字符数组的初始化字符串太长C

  5. 5

    用字符串变量初始化字符数组

  6. 6

    使用String Literal Pool初始化的String变量

  7. 7

    Jasmin字符串声明/初始化错误数组

  8. 8

    C ++中的数组初始化(不是字符串)

  9. 9

    在类函数中初始化字符串数组

  10. 10

    C ++初始化字符串数组

  11. 11

    在C中动态初始化字符串数组

  12. 12

    Jasmin字符串声明/初始化错误数组

  13. 13

    用\ 0初始化字符串数组

  14. 14

    初始化向量字符串数组时出错

  15. 15

    使用标量初始化程序初始化字符串数组

  16. 16

    从字符串数组资源初始化字符串数组

  17. 17

    如何初始化字符串?

  18. 18

    用字符串数组初始化二维char数组

  19. 19

    不确定如何使用字符串数组初始化一维char数组

  20. 20

    通过字符串引用数组元素,并在awk中初始化数组

  21. 21

    是否可以使用条件选择的字符串文字初始化字符数组?

  22. 22

    字符字符串数组的初始化程序中的问题

  23. 23

    关于存储持续时间的数组初始化(字符、字符串、其他)的差异

  24. 24

    将char数组初始化为字符串值,未初始化的索引是否设置为null?

  25. 25

    警告:数组“字母”由带括号的字符串文字初始化

  26. 26

    无法从成员变量的初始化字符串推断数组大小的原因是什么?

  27. 27

    C ++多维字符串数组初始化(std :: map)

  28. 28

    使用大小的推导,char数组的初始化字符串太长

  29. 29

    如何在C ++中使用字符串文字初始化char的动态数组?

热门标签

归档