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

2023-10-20 15:48:46 浏览数 (2)

简介

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

什么是 Pydantic?

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

安装 Pydantic

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

代码语言:javascript复制
pip install pydantic

定义 Pydantic 模型

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

代码语言:javascript复制
from pydantic import BaseModel

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

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

使用 Pydantic 模型

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

  1. 创建模型实例

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

代码语言:javascript复制
data = {"name": "Alice", "age": 30, "hobby": ['football']}
person = Person(**data)
print(person)

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

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

代码语言:javascript复制
data = {"name": "Bob", "age": "thirty", "hobby": "basketball"}
person = Person(**data)  # 这里将引发ValidationError异常

----------
运行脚本,报错如下:
 person = Person(**data)  # 这里将引发ValidationError异常
  File "pydanticmain.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. 获取字段值

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

代码语言:javascript复制
data = {"name": "Muller", "age": 30, "hobby": ['football', 'reading', 'running']}
person = Person(**data)

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

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

代码语言:javascript复制
data = {"name": "Muller", "age": 30, "hobby": ['football', 'reading', 'running']}
person = Person(**data)

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

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

代码语言:javascript复制
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 装饰器定义自定义验证函数:

代码语言:javascript复制
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 有所帮助!

0 人点赞