如何验证 pydantic 中的复杂列表类型?

2024-06-24

为什么 pydantic 不验证 Foo 对象列表的参数,但当参数是基本类型列表时抛出 ValidationError ?

我可以强制执行复杂类型的验证吗?

验证不起作用:

from typing import List
from pydantic import BaseModel


class Foo(BaseModel):
    kind: str = "foo"

class Bar(BaseModel):
    kind: str = "bar"

class Spam(BaseModel):
    foos: List[Foo]

spam = Spam(foos=[Bar()])
print(spam.dict())

>>> {'foos': [{'kind': 'bar'}]}

验证工作:

class Spam(BaseModel):
    foos: List[int]


spam = Spam(foos=[Bar()])
print(spam.dict())

pydantic.error_wrappers.ValidationError: 1 validation error for Spam
foos -> 0
  value is not a valid integer (type=type_error.integer)

当与pydantic,应该记住that https://pydantic-docs.helpmanual.io/usage/models/:

pydantic主要是一个解析库,不是验证库。验证是达到目的的一种手段:构建符合所提供的类型和约束的模型。

换句话说,pydantic 保证输出模型的类型和约束,而不是输入数据.

为了对传入数据进行额外验证,提供了一个工具 -验证者 https://pydantic-docs.helpmanual.io/usage/validators/。 例如:

class Spam(BaseModel):
    foos: List[Foo]

    @validator('foos', pre=True, each_item=True)
    def check_squares(cls, v):
        assert isinstance(v, Foo), "Foo is only allowed"
        return v
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何验证 pydantic 中的复杂列表类型? 的相关文章

  • 嵌套生成器表达式 - 意外结果[重复]

    这个问题在这里已经有答案了 这是测试代码 units 1 2 tens 10 20 nums a b for a in units for b in tens units 3 4 tens 30 40 x for x in nums 假设第
  • Python __init__ * 参数 [重复]

    这个问题在这里已经有答案了 我对 Python 还很陌生 我想使用这个库 但是 该类的构造函数中有一个参数 我找不到任何相关信息 init方法如下所示 def init self ain1 ain2 bin1 bin2 microsteps
  • 从networkx中的文件中读取具有pos属性的节点

    我是 Networkx 的新手 我有一个包含以下格式的节点位置的文件 0 23 23 12 23 where 0是一个节点 23 23 and 12 23分别是X和Y坐标 有谁知道如何读取节点pos属性 使用类似的函数read edgeli
  • pandas 读取列中带有额外逗号的 csv

    我正在阅读一个基本的 csv 文件 其中各列用逗号分隔 列名称如下 userid username body 但是 正文列是一个可能包含逗号的字符串 显然这会导致一个问题 pandas 会抛出一个错误 CParserError Error
  • 如何在redis中使用python删除排序集中的项目

    如何使用 python 删除排序集中大于某个值的项目 key foo pipe redis master conn pipeline pipe zadd key 1 a pipe zadd key 2 b pipe zadd key 3 c
  • Ruby 相当于 Python 的多处理模块是什么?

    为了在 Ruby 或 Python 中获得真正的并发性 我需要创建新的进程 Python 使用以下命令使这变得非常简单multiprocessing模块 它抽象了所有 fork wait 的好处 让我专注于我的代码 Ruby 有类似的东西吗
  • 使用 Python 访问内存映射文件

    我希望利用激战 2 中的内存映射文件 该文件旨在链接到 Mumble 以获得位置音频 该文件包含有关字符坐标的信息和其他有用的信息 我已经能够使用此脚本访问坐标信息 import mmap import struct last while
  • 并行执行按位运算的代码

    我有这段代码 通过将该 AU 矩阵的每个字节 8 个元素打包到 A 中来减少内存消耗 从而使 100k 200k 矩阵占用更少的空间 正如您所期望的 这段代码需要永远运行 我也计划将行数增加到 200k 我正在一个非常强大的实例 CPU 和
  • 如何在 dash/plotly 中使用 iframe? (Python/HTML)

    我正在创建一个仪表板 我想使用这个交互式地图 网站链接 https www ons gov uk peoplepopulationandcommunity healthandsocialcare causesofdeath articles
  • Python Jinja2 调用宏会导致(不需要的)换行符

    我的 JINJA2 模板如下所示 macro print if john name if name John Hi John endif endmacro Hello World print if john Foo print if joh
  • Plotly:如何在堆叠条形图顶部显示值的总和以及各个条形值?

    我正在尝试在 Python 中的 Plotly Express 中添加每个堆叠条形顶部的总计以及各个条形值 import plotly express as px df px data medals long fig px bar df x
  • Angular 4 - 具有动态参数值的自定义验证器

    我编写了一个自定义验证器 用于检查日期是否高于某个最小日期 代码如下所示 export function validateMinDate min Date ValidatorFn return c AbstractControl gt if
  • Python父类访问子私有变量

    以下代码会生成错误 class A object def say something self print self foo print self bar class B A def init self self foo hello sel
  • pip 升级到 pip 10.x.x 后解析需求文件的正确方法?

    所以今天我确实发现随着发布pip 10 x x the req软件包更改了其目录 现在可以在下面找到pip internal req 由于通常的做法是使用parse requirements功能在你的setup py从需求文件中安装所有依赖
  • 如何循环遍历列表中除最后一项之外的所有项? [复制]

    这个问题在这里已经有答案了 Using a for循环 如何循环遍历列表中除最后一项之外的所有项 我想遍历一个列表 检查每个项目与后面的项目 我可以在不使用索引的情况下做到这一点吗 for x in y 1 If y是一个生成器 那么上面的
  • 如何隐藏 Tkinter python Gui

    有人知道如何隐藏 python GUI Tkinter 我已经创建了键盘记录器 对于 GUI 我使用了 python 模块 Tkinter 我想添加名为 HIDE 的按钮 因此当用户单击它时 它将隐藏 GUI 当用户按下 CTRL E 之类
  • Python for 循环前瞻

    我有一个 python for 循环 其中我需要向前查看一项以查看在处理之前是否需要执行某项操作 for line in file if the start of the next line 0 perform pre processing
  • pandas groupby 中两个系列的最大值和最小值

    是否可以从 groupby 中的两个系列中获取最小值和最大值 例如下面的情况 分组时c 我怎样才能得到最小值和最大值a and b同时 df pd DataFrame a 10 20 3 40 55 b 5 14 8 50 60 c x x
  • Maya python 连接选择的属性

    我一直在尝试制作一个简单的脚本 它将采用两个视口选择 然后基本上将第二个视口的旋转连接到第一个 我不确定如何正确地从视口选择中为对象创建变量 这是我的尝试 但不起作用 import maya cmds as cmds sel cmds ls
  • 获取 Flask 中没有端口的请求主机名

    我刚刚设法使用 Flask 获取我的应用程序服务器主机名request host and request url root 但这两个字段都返回请求主机名及其端口 我想使用仅返回请求主机名的字段 方法 而无需进行字符串替换 如果有 没有 We

随机推荐

  • 一位或两位数字正则表达式

    我有下面的代码 仅当我有 2 位数字时它才有效 如果我有 1 位数字则不起作用 我想在两种情况下工作 一位或两位数 var numberRegex 1 9 0 9 我尝试过类似的方法 但不幸的是不起作用 var numberRegex 1
  • 如何在 Phantomjs (javascript) 中获取完整 html 页面的高度?

    您好 已经尝试过所有这些 document body scrollHeight document body offsetHeight document documentElement clientHeight document docume
  • jQuery Switch Case 插件?

    我知道 switch case 语句是 javascript 固有的 你无法更改它 我仍在学习 javascript 和 jQuery 这样我就可以过得去 但我还不够了解 无法编写一些可能达到 jQuery 本身水平的东西 所以 把这个当作
  • 如何将此重复的 Azure DevOps 步骤拆分为可重用模板

    我有以下 Azure DevOps 模板 当前已硬编码到某些特定文件 我希望使用循环将其重构为更简单的模板 这样我就不需要复制 和硬编码 特定文件 为了简洁起见 伪代码 tests yml steps pre test steps This
  • 用于在 pyspark 中处理大数的数据类型

    我将 Spark 与 python 一起使用 上传 csv 文件后 我需要解析 csv 文件中的一列 其中包含 22 位数字长的数字 为了解析我使用的列长类型 我使用 map 函数来定义列 以下是我在 pyspark 中的命令 gt gt
  • 使用 Maven 应用程序进行 Spring Boot 的 Heroku jar 部署,给出代码=H10

    当我尝试访问它时 我的部署收到代码错误 H10 我读到发生这种情况是因为我必须为应用程序设置一个动态端口 我已经尝试了 Heroku 开发中心上提供的所有配置 但没有运气 这是我的 pom xml
  • 您编写 DSL 是为了解决什么样的问题?

    我只是对特定领域语言感到好奇 我在文章中多次看到它们 似乎它们可以用于外部保证或银行数据定义问题 所以我来SO 寻求一些具体的意见 您使用过 DSL 吗 写一个 如果是 那是什么感觉 您认为您的项目之一使用 DSL 后是否会变得更好 更高效
  • 图像字段模型形式的 Django 自定义验证(最大文件大小等)

    我有一个模型 其中有一个名为 横幅 的图像字段 我正在尝试验证文件大小和尺寸 并在图像太大时提供错误 这是 models py class Server models Model id models AutoField ID primary
  • 每日赫斯特指数

    我正在尝试估计股票收益的每日赫斯特指数值 例如 每天也有赫斯特指数 类似这样 https www quandl com data PE CKEC HURST Hurst Exponent of Carmike Cinemas Inc Com
  • MySQL:如何获取行的序列号?

    如何对最低 ID 为 1 最高 ID 为 numberOfResults 的结果进行编号 示例 如果我有一个只有 3 行的表 ID 为 24 87 112 的拉取方式如下 ID 24 87 112 Num 1 2 3 我想要这个的原因是我的
  • 获取可拖动元素的ID

    有没有办法在原生 HTML5 拖放中获取具有属性的元素的 iddraggable true 起初我认为从可拖动容器中获取 id 是标准做法 但实际上它始终是从您开始拖动的子元素中获取 id 这非常烦人 这是一个小提琴 https jsfid
  • 如何同时将数据写入两个 java.io.OutputStream 对象?

    我正在寻找神奇的 Java 类 它可以让我做这样的事情 ByteArrayOutputStream byteStream new ByteArrayOutputStream FileOutputStream fileStream new F
  • 为什么 C# 默认不使用算术溢出检查? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么语言默认情况下不会引发整数溢出错误 https stackoverflow com questions 103654 why dont languages raise errors on int
  • 如何设置一个 C 函数,将用户输入拆分为多个部分,并拆分这些较小的部分?

    我正在尝试开发一个接受一行用户输入的 C 函数 例如这一行 1X 1X 3Y 1Z 1Z 1Z 1Z 2X 2X 编辑 这只是用户输入内容的任意示例 在实际程序中 他们可以输入 1 到 48 个数字字符对之间的任意位置 这个想法是 用户将插
  • 如何修复无法加载资源状态 404 github 页面的问题

    我已经在 Github 上部署了我的项目 它给出了这个 控制台上出现错误 我该如何修复它 git 的链接是 https blessja github io Bottelary https blessja github io Bottelar
  • 如果我的结构实现了 IDisposable,在 using 语句中使用时它会被装箱吗?

    如果我的结构实现了 IDisposable 在 using 语句中使用时它会被装箱吗 Thanks 编辑 这个 timedlock 是一个结构体并实现了 Idisposable http www interact sw co uk iang
  • Streamlit 中的提交表单按钮

    我制作了一个简单的应用程序 它将接受用户输入并将其保存到 SQL 数据库中 用户登录后单击 表单 按钮后 将显示该表单 问题在于st form submit button 即使单击它 它也显示错误 并且不执行任何应该执行的任务 if st
  • 计算排列中“反转”的数量

    设 A 为一个大小的数组N 我们称之为几个索引 i j 一个 逆 如果i lt j and A i gt A j 我需要找到一种接收大小数组的算法N 具有唯一的数字 并返回时间的倒数数O n log n 您可以使用归并排序 http en
  • CMS 更新后 URL 结构发生变化

    我负责现有 Prestashop 1 4 1 4 网站的更新 产品的网址如下 url product php id product 1322 但是当我更新到新版本1 6 0 6时 它变成了这样 url index php id produc
  • 如何验证 pydantic 中的复杂列表类型?

    为什么 pydantic 不验证 Foo 对象列表的参数 但当参数是基本类型列表时抛出 ValidationError 我可以强制执行复杂类型的验证吗 验证不起作用 from typing import List from pydantic