pydantic学习与使用-1.pydantic简介与基础入门
2022/2/17 23:20:21
本文主要是介绍pydantic学习与使用-1.pydantic简介与基础入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
版本文档:v1.9.0
使用 python 类型注释的数据验证和设置管理。
pydantic在运行时强制执行类型提示,并在数据无效时提供用户友好的错误。
定义数据应该如何在纯粹的、规范的 python 中;并使用 pydantic 对其进行验证。
pydantic 简介
pydantic 主要是一个解析库,而不是验证库。
验证是达到目的的一种手段:建立一个符合所提供的类型和约束的模型。
换句话说,pydantic 保证输出模型的类型和约束,而不是输入数据。
这听起来像是一个深奥的区别,但事实并非如此。如果您不确定这意味着什么或它可能如何影响您的使用,您应该阅读下面有关数据转换的部分。
虽然验证不是 pydantic 的主要目的,但您可以使用此库进行自定义验证。
环境安装
python3.6+版本都可以直接pip安装使用
pip install pydantic
目前版本是v1.9.0
简单示例
当我们定义一个user对象的时候,它有id,name,birth,friends等属性.在pydantic中定义对象的主要方法是通过模型(模型继承自 BaseModel 的类)。
- id 是一个字符串类型
- name 也是字符串
- birth 是生日,是一个日期类datetime
- friends 是一个列表,列表里面是user的id
代码示例
from datetime import datetime from typing import List, Optional from pydantic import BaseModel class User(BaseModel): id: int name = 'yo yo' birth: Optional[datetime] = None friends: List[int] = [] external_data = { 'id': '123', 'birth': '2019-06-01 12:22', 'friends': [1, 2, '3'], } user = User(**external_data) print(user.dict()) # dict() 函数将对象转化成字典
运行结果
{'id': 123, 'birth': datetime.datetime(2019, 6, 1, 12, 22), 'friends': [1, 2, 3], 'name': 'yo yo'}
运行过程中发生了什么?
在整个运行的过程中发生了什么?
先实例化 user = User(**external_data)
传入了external_data,以关键字参数传入,等价于
user = User( id='123', birth='2019-06-01 12:22', friends=[1, 2, '3'] )
id 是 int 类型;注释声明告诉pydantic该字段是必须的。如果可能,字符串、字节或浮点数将强制转换为int,否则将引发异常。
name 从默认值推断为其为 str 类型,该字段不是必须的,因为它有默认值。
birth 是 datetime 类型,该字段不是必须的,默认值为 None。pydantic会将表示unix时间戳(例如1496498400)的 int 类型或表示时间和日期的字符串处理成 datetime 类型。
friends 使用Python的 typing 系统,需要一个整数列表,就像 id 字段一样,类整数的对象将会被转换为整数。
前面实例化的时候,是按预期的参数传值的,如果id不是int 类型,实例化失败的时候,看看会发生什么?
如果验证失败,pydantic会抛出一个错误,列出错误的原因:
external_data1 = { 'id': 'aaa', 'birth': '2019-06-01 12:22', 'friends': [1, 2, '3'], } user1 = User( **external_data1 ) user.dict()
校验失败,抛出异常ValidationError:id value is not a valid integer
Traceback (most recent call last): File ".../a.py", line 27, in <module> **external_data1 File "pydantic\main.py", line 331, in pydantic.main.BaseModel.__init__ pydantic.error_wrappers.ValidationError: 1 validation error for User id value is not a valid integer (type=type_error.integer)
接收异常
from pydantic import ValidationError external_data1 = { 'id': 'aaa', 'birth': '2019-06-01 12:22', 'friends': [1, 2, '3'], } try: user1 = User(**external_data1) except ValidationError as e: print(e.json())
异常内容也可以用json格式展示
[ { "loc": [ "id" ], "msg": "value is not a valid integer", "type": "type_error.integer" } ]
这篇关于pydantic学习与使用-1.pydantic简介与基础入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版