自從我開始程式設計以來,我主要使用結構化和流程範例,因為我的任務需要更實用和直接的解決方案。在處理資料擷取時,我必須轉向新的範式才能實現更有組織的程式碼。
這種必要性的一個例子是在抓取任務期間,當我需要捕獲最初是我知道如何處理的類型的特定數據時,但突然間,它要么不存在,要么在捕獲過程中以不同的類型出現.
因此,我必須添加一些 if's 和 try 和 catch 區塊來檢查資料是 int 還是 string ...後來發現沒有捕獲到任何內容,None等等。使用字典時,我最終在以下情況下保存了一些無趣的「預設資料」:
data.get(values, 0)
好吧,令人困惑的錯誤訊息肯定必須停止出現。
這就是 Python 的動態性。變數可以隨時變更其類型,直到您需要更清楚地了解正在使用的類型為止。然後突然出現一堆信息,現在我正在閱讀如何處理數據驗證,IDE 幫助我處理類型提示和有趣的 pydantic 庫。
現在,在資料操作等任務中,透過新的範例,我可以擁有明確聲明其類型的對象,以及允許驗證這些類型的庫。如果出現問題,透過查看更好描述的錯誤訊息來調試會更容易。
所以,這是 Pydantic 文件。有更多疑問,歡迎諮詢。
基本上,如我們所知,我們從以下開始:
pip install pydantic
然後,假設我們希望從包含這些電子郵件的來源中捕獲電子郵件,其中大多數看起來像這樣:「xxxx@xxxx.com」。但有時,它可能是這樣的:「xxxx@」或「xxxx」。我們對應該捕獲的電子郵件格式毫無疑問,因此我們將使用 Pydantic 驗證此電子郵件字串:
from pydantic import BaseModel, EmailStr class Consumer(BaseModel): email: EmailStr account_id: int consumer = Consumer(email="teste@teste", account_id=12345) print(consumer)
請注意,我使用了可選的依賴項“email-validator”,透過 pip install pydantic[email] 安裝。如我們所知,當您執行程式碼時,錯誤將是無效的電子郵件格式「teste@teste」:
Traceback (most recent call last): ... consumer = Consumer(email="teste@teste", account_id=12345) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...: 1 validation error for Consumer email value is not a valid email address: The part after the @-sign is not valid. It should have a period. [type=value_error, input_value='teste@teste', input_type=str]
使用可選依賴項來驗證資料很有趣,就像創建我們自己的驗證一樣,Pydantic 透過 field_validator 允許這樣做。因此,我們知道 account_id 必須為正且大於零。如果不同,Pydantic 警告有異常(值錯誤)會很有趣。程式碼將是:
from pydantic import BaseModel, EmailStr, field_validator class Consumer(BaseModel): email: EmailStr account_id: int @field_validator("account_id") def validate_account_id(cls, value): """Custom Field Validation""" if value <= 0: raise ValueError(f"account_id must be positive: {value}") return value consumer = Consumer(email="teste@teste.com", account_id=0) print(consumer)
$ python capture_emails.py Traceback (most recent call last): ... consumer = Consumer(email="teste@teste.com", account_id=0) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...: 1 validation error for Consumer account_id Value error, account_id must be positive: 0 [type=value_error, input_value=0, input_type=int] For further information visit https://errors.pydantic.dev/2.8/v/value_error
現在,使用正確的值來運行程式碼:
from pydantic import BaseModel, EmailStr, field_validator class Consumer(BaseModel): email: EmailStr account_id: int @field_validator("account_id") def validate_account_id(cls, value): """Custom Field Validation""" if value <= 0: raise ValueError(f"account_id must be positive: {value}") return value consumer = Consumer(email="teste@teste.com", account_id=12345) print(consumer)
$ python capture_emails.py email='teste@teste.com' account_id=12345
對嗎? !
我還閱讀了一些有關本機「dataclasses」模組的內容,該模組更簡單一些,並且與 Pydantic 有一些相似之處。然而,Pydantic 更適合處理需要驗證的更複雜的資料模型。 Dataclasses 原生包含在 Python 中,而 Pydantic 還沒有——至少現在還沒有。
以上是Pydantic • 處理驗證和清理數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!