التصحيح الفعال باستخدام بيان تأكيد بايثون
هل انت مبرمج؟ إذا كان الأمر كذلك ، فإن التصحيح هو مهارة أساسية ، بغض النظر عن اللغة التي تقوم بالتشفير بها. في هذه المقالة ، سوف تتعلم كيفية استخدام جملة التأكيد في Python من أجل التصحيح الفعال.
عندما تعمل في مشروع ، ستحدد وحدات نمطية متعددة. يتضمن ذلك الوظائف وتعريفات الفئات والمزيد. ومن المحتمل أن تواجه أخطاء أو نتائج غير متوقعة بسبب خطأ في التنفيذ. عبارات التأكيد مفيدة في تصحيح مثل هذه التعليمات البرمجية.
في هذا البرنامج التعليمي ، سنتعلم بناء الجملة لاستخدام جملة التأكيد متبوعة بأمثلة من التعليمات البرمجية لرؤيتها أثناء العمل. سنرى أيضًا ما هي أخطاء التأكيد وكيف يمكننا استخدامها لإصلاح الأخطاء في التعليمات البرمجية أثناء التطوير.
هيا نبدأ!
كيفية استخدام بيان التأكيد في بايثون
سنتعلم بناء الجملة لاستخدام جملة التأكيد ، ثم ننتقل إلى كود بعض الأمثلة.
بناء جملة بيان التأكيد
لنبدأ بالصيغة لاستخدام جملة التأكيد في Python:
assert expression, message
هنا،
- التعبير هو أي تعبير Python صالح ليتم تقييمه. يمكن أن يكون هذا شرطًا على قيمة المتغير وقيمة الحقيقة للمتغير وقيمة الإرجاع من دالة وغير ذلك.
- طالما يتم تقييم التعبير إلى True ، فإن تعليمة التأكيد لا تسبب خطأ أو تعيد أي شيء. يشير هذا إلى أن البرنامج يعمل بالشكل المتوقع.
- إذا لم يعد التعبير صحيحًا ، فسيتم تشغيل استثناء AssertionError.
- الرسالة عبارة عن سلسلة اختيارية. يمكنك تحديد رسالة يتم عرضها في التتبع مرة أخرى كلما ظهر استثناء AssertionError.
بعد ذلك ، دعنا ننتقل إلى كتابة بعض الأمثلة حيث يمكن أن تساعدنا عبارة التأكيد في كتابة كود أنظف وخالي من الأخطاء.
يمكنك العثور على أمثلة التعليمات البرمجية المستخدمة في هذا البرنامج التعليمي في GitHub هذا.
أمثلة على بيان تأكيد بايثون
تأمل المثال التالي. لنفترض أن لديك متغير خصم في شفرتك. لكنك تريد أن تكون قيمتها دائمًا أقل من أو تساوي max_discount.
للتحقق من عدم تعيين متغير الخصم لقيمة بطريق الخطأ ، يمكنك إضافة تأكيد. التعبير المراد تقييمه هو: الخصم <= max_discount.
>>> max_discount = 50 >>> discount = 20 >>> assert discount <= max_discount
هنا الخصم (20) أقل من max_discount (50). لذلك فإن بيان التأكيد لا يلقى أي خطأ.
استثناء AssertionError
إذا تم تعيين متغير الخصم على قيمة أكبر من max_discount ، فسيتم إظهار استثناء AssertionError.
>>> discount = 75 >>> assert discount <= max_discount Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError
نعلم أن تعليمة التأكيد تسمح لنا أيضًا بتحديد سلسلة رسالة اختيارية.
دعنا أيضًا نستخدم سلسلة رسائل توفر معلومات تشخيصية وصفية أكثر. إلى جملة التأكيد ، دعنا نضيف سلسلة Python f التي تحتوي أيضًا على قيم الخصم و max_discount.
>>> assert discount <= max_discount, f"discount should be at most {max_discount}; got discount = {discount}" Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError: discount should be at most 50; got discount = 75
كما هو موضح في خلية الإخراج أعلاه ، يتضمن استثناء AssertionError الآن قيم الخصم ومتغيري max_discount.
تصحيح واختبار وظائف Python مع Assert
عند تحديد الوظائف ، قد تقوم أحيانًا بإدخال أخطاء (أخطاء منطقية) عن غير قصد تمنع وظيفتك من العمل على النحو المنشود.
لنأخذ مثالا. لنفترض أن هناك اختبارًا في الفصل وتم منح الطلاب فرصة لمحاولة طرح سؤال إضافي. أي طالب يحاول سؤال المكافأة سيحصل على 10 درجات إضافية في الاختبار. 😄
ضع في اعتبارك الوظيفة التالية get_final_score:
- يأخذ في النتيجة الحالية ، والنتيجة ، ومكافأة منطقية.
- إذا كان الطالب قد أجاب على سؤال المكافأة ، فإن المكافأة المنطقية هي True ، ويحصلون على 10 نقاط أكثر من درجاتهم الحالية.
- تقوم الوظيفة بعد ذلك بإرجاع النتيجة النهائية.
def get_final_score(score,bonus): if bonus: score += 10 return score
دعنا نجري بضع استدعاءات للوظيفة. نرى أنه بالنسبة إلى الدرجات 34 و 40 مع تعيين المكافأة على True و False ، فإن الدرجات النهائية هي 44 و 40 على التوالي.
print(get_final_score(34,True)) # 44 print(get_final_score(40,False)) # 40
ومع ذلك ، فإن الحد الأقصى للنقاط في الاختبار ، على سبيل المثال ، هو 50. لذلك إذا أحرز الطالب 49 درجة وأجاب أيضًا على سؤال المكافأة ، فستحسب الوظيفة get_final_score النتيجة النهائية لتكون 59.
print(get_final_score(49,True)) # 59
من الناحية الفنية ، هذا ممكن. لكن دعنا نفترض أن الطالب لا يمكنه تسجيل أكثر من الحد الأقصى من النقاط الممكنة للاختبار. 🙂
لذلك دعونا نهيئ متغير max_score. والتقاط النتيجة المعادة من الوظيفة في متغير final_score.
بعد ذلك نضيف تأكيدًا يتحقق مما إذا كانت الدرجة النهائية أقل من الدرجة_الأقصى.
def get_final_score(score,bonus): if bonus: score += 10 return score final_score = get_final_score(47,True) max_score = 50 assert final_score <= max_score
نحصل الآن على استثناء AssertionError لاستدعاء الدالة get_final_score (47 ، صحيح):
Traceback (most recent call last): File "main.py", line 17, in <module> assert final_score <= max_score AssertionError
نضيف الآن سلسلة f وصفية إلى جملة تأكيد Python:
assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
Traceback (most recent call last): File "main.py", line 17, in <module> assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}" AssertionError: final_score should be at most 50; got 57
تعديل الوظيفة
دعنا نعود ونعدل تعريف دالة get_final_score لإصلاح السلوك غير المتوقع:
- تأخذ الدالة get_final_score أيضًا max_score كمعامل.
- نتحقق مما إذا كانت المكافأة صحيحة. إذا كان هذا صحيحًا ، نضيف 10 نقاط إلى متغير النتيجة.
- بعد ذلك ، نتحقق مما إذا كانت النتيجة أكبر من max_score. إذا كان الأمر كذلك ، فإننا نرجع max_score.
- خلاف ذلك ، نعود النتيجة.
لقد تأكدنا الآن من أن النتيجة النهائية دائمًا أقل من أو تساوي max_score.
def get_final_score(score,bonus,max_score): if bonus: score += 10 if score > max_score: return max_score return score
كتمرين سريع ، اكتب بعض التأكيدات لتأكيد أن الوظيفة تعمل الآن كما هو متوقع.
ملاحظة حول استثناء AssertionError
على الرغم من حدوث استثناء AssertionError عندما يتم تقييم التعبير إلى False ، يجب أن نتذكر عدم معالجة مثل هذه الأخطاء كاستثناءات. بمعنى أنه لا يجب أن نفعل شيئًا كهذا:
try: <doing this> except AssertionError: <do this>
في المثال السابق على get_final_score ، استخدمنا التأكيد للتحقق مما إذا كان final_score أقل من max_score. ثم قمنا بتعديل تعريف الوظيفة بحيث لا توجد أخطاء في التأكيد.
هذا هو سبب التأكيدات. إنها عمليات فحص سلامة للرمز ، وتساعد في كتابة كود أكثر وضوحًا. من ناحية أخرى ، فإن معالجة الاستثناءات هي توقع ومعالجة الأخطاء غير المتوقعة في وقت التشغيل. غالبًا ما تتضمن هذه الأنواع والقيم المدخلات غير الصالحة.
للتلخيص ، يجب عليك استخدام جملة تأكيد Python من أجل التصحيح الفعال وعدم التعامل مع AssertionErrors كاستثناءات.
خاتمة
يساعدك هذا البرنامج التعليمي في فهم كيفية استخدام عبارة التأكيد في Python. فيما يلي ملخص لما تعلمته:
- تأخذ عبارات تأكيد Python (التأكيدات) صيغة تعبير التأكيد. يتحقق هذا مما إذا كان التعبير صحيحًا. إذا لم يتم تقييمه إلى True ، فسيتم تشغيل استثناء AssertionError.
- يمكنك أيضًا استخدام التوكيد مع تعبير التوكيد النحوي ، الرسالة. سيؤدي هذا إلى طباعة سلسلة الرسالة عند حدوث استثناء AssertionError.
- يجب أن تتذكر عدم تنفيذ معالجة الاستثناءات للتعامل مع أخطاء التوكيد. واستخدم التأكيدات كأداة تصحيح أخطاء مفيدة للتحقق من سلامة التعليمات البرمجية الخاصة بك.
بصفتك مطورًا ، تساعدك التأكيدات في تصحيح الأخطاء. لضمان عمل جميع المكونات الفردية (الوحدات النمطية) للمشروع كما هو متوقع ، يمكنك تعلم كيفية كتابة اختبارات الوحدة في Python.
بعد ذلك ، تحقق من قائمة مشاريع Python المبتدئة التي يمكنك العمل عليها.