Pydantic • 處理驗證和清理數據

PHPz
發布: 2024-08-16 18:03:08
原創
309 人瀏覽過

Pydantic • Dealing with validating and sanitizing data

自從我開始程式設計以來,我主要使用結構化和流程範例,因為我的任務需要更實用和直接的解決方案。在處理資料擷取時,我必須轉向新的範式才能實現更有組織的程式碼。

這種必要性的一個例子是在抓取任務期間,當我需要捕獲最初是我知道如何處理的類型的特定數據時,但突然間,它要么不存在,要么在捕獲過程中以不同的類型出現.

因此,我必須添加一些 if'stry 和 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!