」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Pydantic • 處理驗證和清理數據

Pydantic • 處理驗證和清理數據

發佈於2024-08-19
瀏覽:240

Pydantic • Dealing with validating and sanitizing data

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

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

因此,我必須添加一些if的try和catch區塊來檢查資料是int還是string...後來發現什麼也沒捕獲,None等等。對於字典,我最終在以下情況下保存了一些無趣的「預設資料」:

data.get(values, 0)

嗯,令人困惑的錯誤訊息肯定必須停止出現。

這就是Python 的動態性。變數可以隨時變更其類型,直到您需要更清楚地了解正在使用的類型為止。然後突然出現一堆訊息,現在我正在閱讀如何處理資料驗證,IDE 幫助我處理類型提示和有趣的 pydantic 庫。

現在,在資料操作等任務中,透過新的範例,我可以擁有明確聲明其類型的對象,以及允許驗證這些類型的庫。如果出現問題,透過查​​看更好描述的錯誤訊息,調試會更容易。


派丹提克

所以,這是 Pydantic 文件。有更多問題,歡迎諮詢。

基本上,如我們所知,我們從以下開始:

pip install pydantic

然後,假設我們希望從包含這些電子郵件的來源中捕獲電子郵件,其中大多數看起來像這樣:「[email protected]」。但有時,它可能是這樣的:「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 





$ python capture_emails.py
Traceback (most recent call last):
...
    consumer = Consumer(email="[email protected]", 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 





$ python capture_emails.py
email='[email protected]' account_id=12345

正確的? !

我還閱讀了一些關於本機「dataclasses」模組的內容,該模組更簡單一些,並且與 Pydantic 有一些相似之處。然而,Pydantic 更適合處理需要驗證的更複雜的資料模型。 Dataclasses 本來就包含在 Python 中,而 Pydantic 還沒有——至少現在還沒有。

版本聲明 本文轉載於:https://dev.to/evertontenorio/pydantic-dealing-with-validating-and-sanitizing-data-594p?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3