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