Heim Backend-Entwicklung Python-Tutorial Pydantic • Umgang mit der Validierung und Bereinigung von Daten

Pydantic • Umgang mit der Validierung und Bereinigung von Daten

Aug 16, 2024 pm 06:03 PM

Pydantic • Dealing with validating and sanitizing data

Seit ich mit dem Programmieren angefangen habe, verwende ich überwiegend strukturierte und prozedurale Paradigmen, da meine Aufgaben praktischere und direktere Lösungen erforderten. Bei der Arbeit mit der Datenextraktion musste ich zu neuen Paradigmen wechseln, um einen besser organisierten Code zu erreichen.

Ein Beispiel für diese Notwendigkeit waren Scraping-Aufgaben, bei denen ich bestimmte Daten erfassen musste, die ursprünglich von einem Typ waren, mit dem ich umgehen konnte, aber dann plötzlich entweder nicht existierten oder während der Erfassung in einem anderen Typ auftraten .

Folglich musste ich einige Blöcke ifs und try and Catch hinzufügen, um zu überprüfen, ob die Daten ein int oder ein String waren ... später entdeckte ich, dass nichts erfasst wurde, None usw. Bei Wörterbüchern habe ich in folgenden Situationen einige uninteressante „Standarddaten“ gespeichert:

data.get(values, 0)
Nach dem Login kopieren

Nun, die verwirrenden Fehlermeldungen mussten auf jeden Fall aufhören zu erscheinen.

So ist Python dynamisch. Der Typ von Variablen kann jederzeit geändert werden, bis Sie mehr Klarheit über die Typen benötigen, mit denen Sie arbeiten. Dann tauchen plötzlich eine Menge Informationen auf und jetzt lese ich darüber, wie ich mit der Datenvalidierung umgehen kann, wobei mir die IDE mit Typhinweisen und der interessanten Pydantic-Bibliothek hilft.

Jetzt kann ich bei Aufgaben wie der Datenmanipulation und mit einem neuen Paradigma Objekte haben, deren Typen explizit deklariert werden, zusammen mit einer Bibliothek, die die Validierung dieser Typen ermöglicht. Wenn etwas schief geht, ist das Debuggen einfacher, da die besser beschriebenen Fehlerinformationen angezeigt werden.


Pydantisch

Hier ist also die Pydantic-Dokumentation. Bei weiteren Fragen ist es immer gut, sich an uns zu wenden.

Grundsätzlich beginnen wir, wie wir bereits wissen, mit:

pip install pydantic
Nach dem Login kopieren

Und dann möchten wir hypothetisch E-Mails von einer Quelle erfassen, die diese E-Mails enthält, und die meisten davon sehen so aus: „xxxx@xxxx.com“. Aber manchmal kann es so kommen: „xxxx@“ oder „xxxx“. Wir haben keine Zweifel an dem E-Mail-Format, das erfasst werden soll, daher werden wir diese E-Mail-Zeichenfolge mit Pydantic validieren:

from pydantic import BaseModel, EmailStr

class Consumer(BaseModel):
    email: EmailStr
    account_id: int

consumer = Consumer(email="teste@teste", account_id=12345)

print(consumer)
Nach dem Login kopieren

Beachten Sie, dass ich eine optionale Abhängigkeit, „email-validator“, verwendet habe, installiert mit: pip install pydantic[email]. Wenn Sie den Code ausführen, wird der Fehler bekanntlich im ungültigen E-Mail-Format „teste@teste“ vorliegen:

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]
Nach dem Login kopieren

Die Verwendung optionaler Abhängigkeiten zum Validieren von Daten ist ebenso interessant wie das Erstellen eigener Validierungen, und Pydantic ermöglicht dies über field_validator. Wir wissen also, dass account_id positiv und größer als Null sein muss. Wenn es anders ist, wäre es für Pydantic interessant, zu warnen, dass eine Ausnahme, ein Wertfehler, aufgetreten ist. Der Code wäre dann:

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)
Nach dem Login kopieren
$ 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
Nach dem Login kopieren

Führen Sie nun den Code mit den richtigen Werten aus:

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)
Nach dem Login kopieren
$ python capture_emails.py
email='teste@teste.com' account_id=12345
Nach dem Login kopieren

Richtig?!

Ich habe auch etwas über das native Modul „dataclasses“ gelesen, das etwas einfacher ist und einige Ähnlichkeiten mit Pydantic aufweist. Allerdings eignet sich Pydantic besser für den Umgang mit komplexeren Datenmodellen, die Validierungen erfordern. Datenklassen waren nativ in Python enthalten, Pydantic jedoch nicht – zumindest noch nicht.

Das obige ist der detaillierte Inhalt vonPydantic • Umgang mit der Validierung und Bereinigung von Daten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden Mar 05, 2025 am 09:58 AM

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

So herunterladen Sie Dateien in Python So herunterladen Sie Dateien in Python Mar 01, 2025 am 10:03 AM

So herunterladen Sie Dateien in Python

Bildfilterung in Python Bildfilterung in Python Mar 03, 2025 am 09:44 AM

Bildfilterung in Python

Wie benutze ich eine schöne Suppe, um HTML zu analysieren? Wie benutze ich eine schöne Suppe, um HTML zu analysieren? Mar 10, 2025 pm 06:54 PM

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

Wie man mit PDF -Dokumenten mit Python arbeitet Wie man mit PDF -Dokumenten mit Python arbeitet Mar 02, 2025 am 09:54 AM

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen Wie kann man mit Redis in Django -Anwendungen zwischenstrichen Mar 02, 2025 am 10:10 AM

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Einführung des natürlichen Sprach -Toolkits (NLTK) Einführung des natürlichen Sprach -Toolkits (NLTK) Mar 01, 2025 am 10:05 AM

Einführung des natürlichen Sprach -Toolkits (NLTK)

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch? Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch? Mar 10, 2025 pm 06:52 PM

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?

See all articles