软件测试|Pydantic详细介绍与基础入门

2024-01-21

简介

Pydantic 是一个强大的 Python 库,用于数据验证和解析,特别是用于处理 JSON 数据。它的主要目标是使数据验证和解析变得简单、直观和可维护。本文将介绍 Pydantic 的基础知识,包括如何定义模型、验证数据以及处理错误。

什么是 Pydantic?

Pydantic 是一个用于数据验证和解析的库,它让我们能够定义数据模型并根据这些模型验证输入数据。它的一个重要特性是自动转换输入数据为强类型的 Python 对象,并提供了清晰的错误信息,以便我们可以轻松地处理验证失败的情况。

安装 Pydantic

Pydantic 是Python的第三方库,我们可以直接使用pip命令进行安装,命令如下:

pip install pydantic

定义 Pydantic 模型

要使用 Pydantic,首先需要定义一个模型类。模型类是一个普通的 Python 类,它继承自 pydantic.BaseModel ,并定义了数据字段以及它们的类型。下面是一个简单的示例:

from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int
	hooby: list

在这个示例中,我们定义了一个名为 Person 的模型,它有三个字段: name age 以及 hobby ,分别具有字符串、整数以及列表类型。Pydantic 将使用这些字段定义来验证输入数据。

使用 Pydantic 模型

一旦定义了 Pydantic 模型,我们就可以使用它来验证和解析数据。以下是一些常见的用法示例:

  1. 创建模型实例

我们可以通过传递字典数据来创建模型实例,例如:

data = {"name": "Alice", "age": 30, "hobby": ['football']}
person = Person(**data)
print(person)

----------
#######
输出结果如下:
name='Alice' age=30 hobby=['football']
  1. 数据验证

Pydantic 会自动验证输入数据是否符合模型的定义。如果输入数据不符合定义,将引发 pydantic.ValidationError 异常。例如:

data = {"name": "Bob", "age": "thirty", "hobby": "basketball"}
person = Person(**data)  # 这里将引发ValidationError异常

----------
运行脚本,报错如下:
 person = Person(**data)  # 这里将引发ValidationError异常
  File "pydantic\main.py", line 331, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 2 validation errors for Person
age
  value is not a valid integer (type=type_error.integer)
hobby
  value is not a valid list (type=type_error.list)
  1. 获取字段值

我们可以像访问普通类属性一样访问模型字段的值:

data = {"name": "Muller", "age": 30, "hobby": ['football', 'reading', 'running']}
person = Person(**data)

print(person.name)
print(person.age)
print(person.hobby)
  1. 转换为字典

我们可以将模型实例转换为字典,以便将其序列化为 JSON 数据:

data = {"name": "Muller", "age": 30, "hobby": ['football', 'reading', 'running']}
person = Person(**data)

person_dict = person.dict()
print(person_dict)
  1. 处理验证错误

当验证失败时,Pydantic 提供了详细的错误信息,以便我们处理错误。我们可以通过捕获 pydantic.ValidationError 异常来访问错误信息。以下是一个示例:

from pydantic import BaseModel
from pydantic import ValidationError

class Person(BaseModel):
    name: str
    age: int
    hobby: list


try:
    data = {"name": "Muller", "age": "thirty", "hobby": ['football', 'reading', 'running']}
    person = Person(**data)
except ValidationError as e:
    print(e)

-------------
运行脚本,结果如下:
1 validation error for Person
age
  value is not a valid integer (type=type_error.integer)

我们可以看到输出包含有关验证失败的详细信息的错误消息,这将帮助我们快速识别和解决问题。

  1. 自定义验证规则

除了基本类型验证之外,我们还可以自定义验证规则。例如,如果我们想确保年龄在特定范围内,可以使用 @validator 装饰器定义自定义验证函数:

from pydantic import validator

class Person(BaseModel):
    name: str
    age: int
    hobby:list

    @validator("age")
    def age_must_be_positive(cls, age):
        if age < 0:
            raise ValueError("Age must be a positive integer")
        return age

在这个示例中,我们定义了一个 age_must_be_positive 方法,它将验证年龄是否为正整数。

总结

Pydantic 是一个强大的 Python 库,用于数据验证和解析。它使您我们能够轻松地定义数据模型、验证数据、处理错误以及自定义验证规则。无论是在构建 Web 应用程序、API、命令行工具还是其他任何类型的 Python 应用程序, Pydantic 都可以帮助我们更轻松地处理数据。希望本文对大家入门 Pydantic 有所帮助!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件测试|Pydantic详细介绍与基础入门 的相关文章

  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • 取消后调用 boost::asio 异步处理程序没有错误

    我的代码在单个线程中使用 boost asio 和 io service 来执行各种套接字操作 所有操作都是异步的 每个处理程序都依赖于boost system error code 特别boost asio error operation
  • Git 扩展 - 无法在 Windows 上推送到网络驱动器中的 git bare 存储库

    我正在 Windows 上学习 git 我已经安装了 Git 扩展 版本 2 47 3 并使用了它 我在我的 C 单元中创建了一个裸存储库 作为中央存储库 并在硬盘中的其他任何位置创建了个人存储库 我对硬盘中的这两个存储库进行提交 推送和拉
  • 在 Cygwin 软件包列表中找不到 Openssl

    这里说的是https github com joyent node wiki Building node js on Cygwin Windows https github com joyent node wiki Building nod
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • 在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥

    正如标题所示 我想在不使用 OpenSSL 或任何其他第三方工具的情况下导出我的私钥 如果我需要一个 cer文件或 pfx我可以通过 MMC 或 PowerShell 轻松导出这些文件pkiclient但我找不到获取私钥的方法 https
  • 不在焦点时响应键盘? (C#、Vista)

    我正在尝试编写一个应用程序 只要按下 Shift 键 无论当前哪个应用程序具有焦点 它都会做出响应 我尝试过这个SetWindowsHookEx 与GetKeyboardState 但这两种方法仅在应用程序窗口具有焦点时才有效 我需要它在全
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • SetCurrentDirectoryW 中的错误 206

    在我之后之前不清楚的问题 https stackoverflow com questions 44389617 long path name in setcurrentdirectoryw 我以某种方式能够创建一个具有长路径名的目录 但是
  • teracopy 如何替换默认的 Windows 副本

    我问了这个问题Windows 文件复制内部结构 动态加密 https stackoverflow com questions 24220382 windows file copy internals on the fly encryptio
  • 非托管 C++ 中的默认打印机

    我正在寻找一种使用非托管 C 查找 Windows 默认打印机名称的方法 找到了大量 NET 示例 但非托管没有成功 谢谢 以下是如何获取当前打印机和默认打印机的列表 如果有一台设置为默认打印机 另请注意 如果用户没有打印机或未将打印机名称
  • 如何向未知用户目录读取/写入文件?

    我正在尝试从用户目录 C Users USERNAME Test Source 读取和写入文件 但我未能成功找到任何有关如何自动检测用户名的资源 其中的 USERNAME上面的例子 或者无论如何 我可以让它读取和写入目录 而不需要知道用户名
  • 将所有文件与指定目录(和子目录)中的所有文件进行二进制比较

    我需要将目录及其子目录中包含的所有文件与同一目录及其子目录中包含的所有其他文件进行比较 并将匹配文件的路径记录到文本文件或 CSV 我意识到有一些软件工具可以做到这一点 但除非它可以在 Windows 中开箱即用 否则我将不被允许在我的网络
  • 将 OpenBLAS 链接到 MinGW

    我正在尝试链接OpenBLAS https www openblas net 图书馆与明GW w64 https mingw w64 org Windows 上的编译器 这是我的代码 include
  • 为什么 Git Bash 无法运行我的可执行文件?

    I am on git for windows https github com git for windows 吉特 巴什 我无法在命令行上运行可执行文件 Pedr Abc 07 MINGW64 c dev ls sqlite3 exe
  • 如何处理来自单独线程的窗口消息?

    我希望启动一个单独的线程来处理窗口消息 通过阻塞 GetMessage 循环 但之后仍然在初始线程中创建窗口 在单独的线程中 一旦启动 我就会调用PeekMessage使用 PM NOREMOVE 确保消息队列存在 有必要吗 然后 Atta
  • 如何使用正则表达式验证带有可选百分比符号的小数?

    正如问题的标题 我需要使用以下值验证正则表达式 最多 2 个小数位和 9 个整数 带有可选的百分比符号 Valid 10 0 1111111 12 15 2 10 2 3 Invalid 12 02 123456789123 123 I t
  • C# 获取子窗口句柄

    我正在用 C 启动一个进程 然后使用 SendMessage 将 Windows 消息发送到该进程 通常我将消息发送到 Process MainWindowHandle 但在某些情况下 我可能需要找到子窗口句柄并向那里发送消息 我将如何在
  • Windows 上最快的屏幕捕获方法

    我想为Windows平台编写一个截屏程序 但不确定如何捕获屏幕 我知道的唯一方法是使用 GDI 但我很好奇是否还有其他方法可以实现此目的 如果有的话 哪种方法产生的开销最小 速度是首要任务 截屏程序将用于录制游戏镜头 不过 如果这确实缩小了
  • 如果我使用客户端计算机上未安装的字体,会发生什么情况?

    有人可以告诉我 如果我在 WinForms 应用程序中使用目标计算机上不可用的字体 会发生什么情况 它是否使用同一系列的字体 只是 Sans Serif 还是其他字体 您的应用程序将回退到 Segoe UI Tahoma 然后是 MS Sa

随机推荐