Pydantic中Optional 和Union類(lèi)型的使用
簡(jiǎn)介
Pydantic 是一個(gè)用于數(shù)據(jù)驗(yàn)證和設(shè)置管理的 Python 庫(kù),它通過(guò)類(lèi)型注解(type hints)提供了強(qiáng)大的數(shù)據(jù)驗(yàn)證功能。本文將深入探討 Pydantic中 Optional
和 Union
類(lèi)型的使用,這兩者在處理可選字段和多類(lèi)型字段時(shí)尤為重要。
Optional 類(lèi)型
Optional
類(lèi)型用于表示一個(gè)字段可以是指定類(lèi)型或 None。這在需要可選字段時(shí)非常有用。
定義可選字段
通過(guò) typing.Optional
可以定義可選字段。實(shí)際使用中,Optional[X]
等價(jià)于 Union[X, None]
。
from typing import Optional from pydantic import BaseModel class User(BaseModel): id: int name: str age: Optional[int] = None # age 可以是 int 或 None user1 = User(id=1, name='Alice', age=30) user2 = User(id=2, name='Bob') # age 省略,默認(rèn)為 None print(user1) print(user2)
驗(yàn)證可選字段
Pydantic 會(huì)自動(dòng)處理可選字段的驗(yàn)證。如果字段值為 None
或不提供值,它不會(huì)引發(fā)驗(yàn)證錯(cuò)誤。
from pydantic import ValidationError try: user = User(id=3, name='Charlie', age='thirty') except ValidationError as e: print(e)
上述代碼會(huì)因?yàn)?nbsp;age
不能轉(zhuǎn)換為整數(shù)而引發(fā)驗(yàn)證錯(cuò)誤。
Union 類(lèi)型
Union 類(lèi)型用于表示字段可以是多個(gè)類(lèi)型中的一種。它允許更靈活的數(shù)據(jù)輸入。
定義多類(lèi)型字段
通過(guò) typing.Union
可以定義字段可以接受多個(gè)類(lèi)型。
from typing import Union from pydantic import BaseModel class Item(BaseModel): id: int value: Union[str, int] # value 可以是 str 或 int item1 = Item(id=1, value='a string') item2 = Item(id=2, value=100) print(item1) print(item2)
驗(yàn)證多類(lèi)型字段
Pydantic 會(huì)嘗試將字段值匹配到 Union 類(lèi)型中列出的每一種類(lèi)型,直到成功為止。
from pydantic import ValidationError try: item = Item(id=3, value=[1, 2, 3]) # list 不是合法的類(lèi)型 except ValidationError as e: print(e)
上述代碼會(huì)因?yàn)?nbsp;value
不是 str
或 int
而引發(fā)驗(yàn)證錯(cuò)誤。
Optional 和 Union 的組合
在實(shí)際應(yīng)用中,我們經(jīng)常需要組合使用 Optional
和 Union
來(lái)處理更復(fù)雜的場(chǎng)景。
可選的多類(lèi)型字段
我們可以使用 Optional[Union[X, Y]]
表示字段可以是 X
類(lèi)型或 Y
類(lèi)型,或者 None。
class Product(BaseModel): id: int discount: Optional[Union[int, float]] = None # discount 可以是 int、float 或 None product1 = Product(id=1, discount=20) product2 = Product(id=2, discount=15.5) product3 = Product(id=3) # discount 省略,默認(rèn)為 None print(product1) print(product2) print(product3)
驗(yàn)證可選的多類(lèi)型字段
Pydantic 會(huì)按順序驗(yàn)證 Union
中列出的每個(gè)類(lèi)型,并允許字段為 None
。
from pydantic import ValidationError try: product = Product(id=4, discount='50%') # str 不是合法的類(lèi)型 except ValidationError as e: print(e)
上述代碼會(huì)因?yàn)?nbsp;discount
不是 int
或 float
而引發(fā)驗(yàn)證錯(cuò)誤。
總結(jié)
Pydantic 的 Optional
和 Union
類(lèi)型提供了靈活的數(shù)據(jù)驗(yàn)證機(jī)制,使得我們能夠處理復(fù)雜的可選字段和多類(lèi)型字段。在定義數(shù)據(jù)模型時(shí),合理使用這兩種類(lèi)型可以顯著提高代碼的健壯性和可讀性。
到此這篇關(guān)于Pydantic中Optional 和Union類(lèi)型的使用的文章就介紹到這了,更多相關(guān)Pydantic Optional Union內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python Pydantic進(jìn)行數(shù)據(jù)驗(yàn)證的方法詳解
- Python中的Pydantic序列化詳解
- python庫(kù)pydantic的入門(mén)簡(jiǎn)易教程
- 原理解析為什么pydantic可變對(duì)象沒(méi)有隨著修改而變化
- 基于Pydantic封裝的通用模型在API請(qǐng)求驗(yàn)證中的應(yīng)用詳解
- pydantic-resolve嵌套數(shù)據(jù)結(jié)構(gòu)生成LoaderDepend管理contextvars
- pydantic?resolve解決嵌套數(shù)據(jù)結(jié)構(gòu)生成痛點(diǎn)分析
- pydantic進(jìn)階用法示例詳解
- python庫(kù)pydantic的簡(jiǎn)易入門(mén)教程
- Python編程pydantic觸發(fā)及訪問(wèn)錯(cuò)誤處理
相關(guān)文章
Pytorch搭建yolo3目標(biāo)檢測(cè)平臺(tái)實(shí)現(xiàn)源碼
這篇文章主要為大家介紹了Pytorch搭建yolo3目標(biāo)檢測(cè)平臺(tái)實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05windows系統(tǒng)Tensorflow2.x簡(jiǎn)單安裝記錄(圖文)
這篇文章主要介紹了windows系統(tǒng)Tensorflow2.x簡(jiǎn)單安裝記錄(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01只用20行Python代碼實(shí)現(xiàn)屏幕錄制功能
python小哥哥發(fā)現(xiàn)女朋友最近總是很忙的樣子,晚上匆匆忙忙道過(guò)晚安就不說(shuō)話(huà)了.可是,QQ頭像卻會(huì)偶爾亮起來(lái).小哥哥非常擔(dān)心,是不是賬號(hào)被盜了呢然后,就想幫女朋友排查一下所以就用python寫(xiě)了一個(gè)錄制腳本,悄悄裝在女友電腦上,需要的朋友可以參考下2021-06-06python dataframe 輸出結(jié)果整行顯示的方法
今天小編就為大家分享一篇python dataframe 輸出結(jié)果整行顯示的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06對(duì)Xpath 獲取子標(biāo)簽下所有文本的方法詳解
今天小編就為大家分享一篇對(duì)Xpath 獲取子標(biāo)簽下所有文本的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01centos 自動(dòng)運(yùn)行python腳本和配置 Python 定時(shí)任務(wù)
這篇文章主要介紹了centos 自動(dòng)運(yùn)行python腳本和配置 Python 定時(shí)任務(wù),文章內(nèi)容介紹詳細(xì),需要的小伙伴可以參考一下,希望對(duì)你有所幫助2022-03-03