منذ أن بدأت البرمجة، استخدمت في الغالب نماذج منظمة وإجرائية، حيث كانت مهامي تتطلب حلولاً أكثر عملية ومباشرة. عند العمل مع استخراج البيانات، كان علي أن أتحول إلى نماذج جديدة لتحقيق كود أكثر تنظيما.
أحد الأمثلة على هذه الضرورة كان أثناء إلغاء المهام عندما كنت بحاجة إلى التقاط بيانات محددة كانت في البداية من النوع الذي كنت أعرف كيفية التعامل معه، ولكن بعد ذلك فجأة، إما أنها لم تكن موجودة أو ظهرت في نوع مختلف أثناء الالتقاط .
وبالتالي، اضطررت إلى إضافة بعض كتل if's وحاول والتقاط للتحقق مما إذا كانت البيانات عبارة عن int أو سلسلة ... واكتشفت لاحقًا أنه لم يتم التقاط أي شيء، لا شيء ، وما إلى ذلك. باستخدام القواميس، انتهى بي الأمر إلى حفظ بعض "البيانات الافتراضية" غير المثيرة للاهتمام في مواقف مثل:
data.get(values, 0)
حسنًا، من المؤكد أن رسائل الخطأ المربكة يجب أن تتوقف عن الظهور.
هذه هي الطريقة التي تتميز بها بايثون بالديناميكية. يمكن تغيير أنواع المتغيرات وقتما تشاء، حتى تحتاج إلى مزيد من الوضوح حول الأنواع التي تعمل معها. ثم فجأة، تظهر مجموعة من المعلومات، وأنا الآن أقرأ عن كيفية التعامل مع التحقق من صحة البيانات، حيث يساعدني 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يمين؟!
قرأت أيضًا شيئًا عن وحدة "فئات البيانات" الأصلية، وهي أبسط قليلاً ولها بعض أوجه التشابه مع Pydantic. ومع ذلك، فإن Pydantic أفضل في التعامل مع نماذج البيانات الأكثر تعقيدًا التي تتطلب التحقق من الصحة. تم تضمين فئات البيانات أصلاً في بايثون، في حين لم يتم تضمينها في Pydantic، على الأقل، ليس بعد.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3