في هذا الدرس من سلسلة أساسيات بايثون سنتعرف على كلمة مهمة قد تراها في أكواد Python، وهي assert. هذه الكلمة تُستخدم لاختبار صحة شرط معين داخل الكود أثناء التطوير، فإذا كان الشرط صحيحًا يستمر البرنامج، وإذا كان الشرط غير صحيح يظهر خطأ اسمه AssertionError.
قد تبدو assert غريبة في البداية، لكنها مفيدة جدًا عندما تريد التأكد أن الكود يعمل كما تتوقع. مثلًا: تريد التأكد أن العمر لا يكون بالسالب، أو أن نتيجة عملية حسابية ليست خاطئة، أو أن قيمة معينة من النوع الصحيح قبل إكمال تنفيذ البرنامج.
في هذا المقال سنشرح معنى assert في Python، وطريقة استخدامها، والفرق بينها وبين if، ومتى تكون مفيدة، ومتى يجب تجنب استخدامها، مع أمثلة عملية مناسبة للمبتدئين.
الخلاصة السريعة: تستخدمassertأثناء التطوير لاختبار افتراض معين داخل الكود. إذا كان الشرط صحيحًا يكمل البرنامج، وإذا كان خاطئًا يظهرAssertionError. {alertInfo}
{getToc} $title={محتوى المقال}
ما معنى assert في Python؟
كلمة assert تعني: تأكد أن هذا الشرط صحيح. فإذا كان الشرط صحيحًا، لا يحدث شيء ويكمل البرنامج عمله. أما إذا كان الشرط خاطئًا، فإن Python توقف التنفيذ وتعرض خطأ من نوع AssertionError.
الشكل الأساسي لاستخدام assert هو:
assert condition
حيث condition هو شرط يرجع True أو False.
مثال بسيط:
age = 20
assert age >= 0
print("العمر صحيح")
في هذا المثال الشرط صحيح لأن age يساوي 20، ولذلك سيكمل البرنامج ويطبع:
العمر صحيح
ماذا يحدث إذا فشل شرط assert؟
إذا كان الشرط الموجود بعد assert غير صحيح، سيظهر خطأ AssertionError.
age = -5
assert age >= 0
print("العمر صحيح")
هنا الشرط age >= 0 غير صحيح، لأن العمر يساوي -5. لذلك سيظهر خطأ يشبه:
AssertionError
ولن يصل البرنامج إلى سطر print()؛ لأن التنفيذ توقف عند السطر الذي يحتوي على assert.
إضافة رسالة توضيحية مع assert
يمكنك إضافة رسالة تظهر عند فشل الشرط. وهذه طريقة أفضل من استخدام assert بدون رسالة، لأن الرسالة تساعدك على فهم سبب الخطأ بسرعة.
age = -5
assert age >= 0, "العمر لا يمكن أن يكون بالسالب"
print("العمر صحيح")
إذا فشل الشرط، سيظهر خطأ مع الرسالة:
AssertionError: العمر لا يمكن أن يكون بالسالب
نصيحة مهمة: عند استخدام assert، حاول كتابة رسالة واضحة حتى تفهم سبب فشل الشرط عند حدوث الخطأ. {alertSuccess}
مثال عملي: التأكد أن الرقم موجب
لنفترض أن لديك دالة تحسب مربع رقم معين، لكنك تريد أثناء التطوير التأكد أن القيمة المدخلة للدالة أكبر من صفر.
def square_positive(number):
assert number > 0, "يجب أن يكون الرقم أكبر من صفر"
return number * number
print(square_positive(5))
الناتج:
25
أما إذا استدعيت الدالة بقيمة غير مناسبة:
print(square_positive(-3))
سيظهر خطأ:
AssertionError: يجب أن يكون الرقم أكبر من صفر
مثال عملي: اختبار نتيجة عملية حسابية
يمكن استخدام assert لاختبار أن دالة معينة تعطي النتيجة المتوقعة. مثلًا:
def add(a, b):
return a + b
assert add(2, 3) == 5
assert add(10, 5) == 15
print("كل الاختبارات نجحت")
إذا كانت النتائج صحيحة، سيطبع البرنامج:
كل الاختبارات نجحت
هذه الفكرة قريبة من مفهوم الاختبارات البرمجية، لكنها هنا بشكل بسيط جدًا يناسب المبتدئين.
هل assert بديل عن if؟
لا، assert ليست بديلًا مباشرًا عن if. صحيح أن الاثنين يستخدمان شروطًا، لكن الهدف مختلف.
| المقارنة | assert |
if |
|---|---|---|
| الهدف | اختبار افتراض أثناء التطوير | تنفيذ منطق برمجي حسب الشرط |
| ماذا يحدث عند فشل الشرط؟ | يظهر AssertionError |
ينتقل البرنامج إلى else أو يتجاوز الكود |
| هل تصلح للتحقق من إدخال المستخدم؟ | لا يفضل الاعتماد عليها | نعم، هي الأنسب |
| الاستخدام الأفضل | اختبار صحة افتراضات داخلية في الكود | التحكم في مسار البرنامج |
مثال باستخدام if للتحقق من إدخال المستخدم:
age = int(input("أدخل عمرك: "))
if age < 0:
print("العمر غير صحيح")
else:
print("العمر صحيح")
هنا if أفضل من assert، لأننا نتعامل مع إدخال مستخدم حقيقي، وليس مجرد اختبار داخلي أثناء التطوير.
متى أستخدم assert في Python؟
استخدم assert عندما تريد التأكد من افتراض داخلي أثناء كتابة الكود أو اختباره.
أمثلة مناسبة:
- التأكد أن دالة معينة أعادت نتيجة متوقعة.
- التأكد أن قيمة داخلية لا يجب أن تكون فارغة.
- التأكد أن قائمة معينة تحتوي على عناصر قبل معالجتها.
- اختبار دوال صغيرة أثناء التعلم.
- اكتشاف الأخطاء المنطقية أثناء التطوير.
مثال:
items = ["apple", "banana"]
assert len(items) > 0, "القائمة لا يجب أن تكون فارغة"
print(items[0])
متى لا تستخدم assert؟
لا تستخدم assert كطريقة أساسية لحماية البرنامج من أخطاء المستخدم. مثلًا لا تعتمد عليها للتحقق من كلمة المرور، أو صلاحيات المستخدم، أو القيم القادمة من نموذج إدخال، أو أي بيانات خارجية.
بدلًا من ذلك استخدم if أو try و except حسب الحالة.
مثال غير مناسب:
password = input("أدخل كلمة المرور: ")
assert password == "12345", "كلمة المرور خاطئة"
الأفضل:
password = input("أدخل كلمة المرور: ")
if password == "12345":
print("تم تسجيل الدخول")
else:
print("كلمة المرور خاطئة")
تنبيه مهم: لا تستخدم assert كوسيلة أمان أو تحقق أساسي من المستخدم. استخدمها غالبًا لاختبار افتراضات داخلية أثناء التطوير. {alertWarning}
ما هو AssertionError؟
AssertionError هو الخطأ الذي يظهر عندما يفشل شرط assert. بمعنى أن Python وصلت إلى سطر assert ووجدت أن الشرط غير صحيح.
مثال:
x = 10
assert x < 5, "x يجب أن يكون أقل من 5"
النتيجة:
AssertionError: x يجب أن يكون أقل من 5
هذا الخطأ يخبرك أن الافتراض الذي كتبته لم يكن صحيحًا.
هل يمكن تعطيل assert في Python؟
نعم، يمكن تشغيل Python بوضع تحسين معين يجعل بعض تعليمات assert لا تُنفذ. لذلك لا يجب الاعتماد على assert في الأمور الحساسة أو التحقق الأساسي من بيانات المستخدم.
هذا سبب إضافي يجعلنا نقول إن assert مفيدة أثناء التطوير والاختبار، لكنها ليست بديلًا عن التحقق الحقيقي في البرامج التي تعتمد على بيانات المستخدم.
استخدام assert مع الدوال
يمكنك استخدام assert داخل الدوال للتأكد من أن القيم التي تعمل عليها الدالة منطقية.
def calculate_discount(price, discount):
assert price > 0, "السعر يجب أن يكون أكبر من صفر"
assert 0 <= discount <= 100, "نسبة الخصم يجب أن تكون بين 0 و 100"
final_price = price - (price * discount / 100)
return final_price
print(calculate_discount(100, 20))
الناتج:
80.0
هذا المثال يوضح كيف تساعدك assert في اكتشاف القيم غير المنطقية أثناء اختبار الدالة.
assert مع القوائم
يمكنك استخدام assert للتأكد من أن قائمة ليست فارغة قبل استخدام أول عنصر فيها.
names = ["Ali", "Sara"]
assert len(names) > 0, "القائمة فارغة"
print(names[0])
إذا كانت القائمة فارغة:
names = []
assert len(names) > 0, "القائمة فارغة"
سيظهر:
AssertionError: القائمة فارغة
assert مع الأنواع type
يمكنك أيضًا استخدام assert للتأكد من نوع قيمة معينة.
name = "Ali"
assert type(name) == str, "name يجب أن يكون نصًا"
print(name.upper())
لكن في المشاريع الأكبر قد تجد طرقًا أفضل لتنظيم التحقق من الأنواع، لذلك اعتبر هذا المثال تعليميًا للمبتدئين.
أخطاء شائعة عند استخدام assert
1. استخدام assert بدل if مع إدخال المستخدم
إذا كنت تتحقق من قيمة أدخلها المستخدم، استخدم if أو try except بدل الاعتماد على assert.
2. عدم كتابة رسالة توضيحية
كتابة assert بدون رسالة قد يجعل الخطأ غير واضح.
assert age >= 0
الأفضل:
assert age >= 0, "العمر لا يمكن أن يكون بالسالب"
3. استخدام assert لأمور أمنية
لا تستخدم assert للتحقق من كلمات المرور أو الصلاحيات أو حماية أجزاء مهمة من التطبيق.
4. عدم فهم أن assert مخصصة للاختبار والتطوير
الغرض الأساسي من assert هو مساعدتك أثناء التطوير على اكتشاف الأخطاء المنطقية بسرعة.
مقارنة سريعة: assert و if و try except
| الأداة | تستخدم متى؟ | مثال استخدام |
|---|---|---|
assert |
لاختبار افتراض داخلي أثناء التطوير | التأكد أن نتيجة دالة تساوي المتوقع |
if |
لاتخاذ قرار داخل البرنامج | إذا كان العمر أقل من 18 اطبع رسالة |
try except |
للتعامل مع أخطاء قد تحدث أثناء التشغيل | محاولة تحويل نص إلى رقم والتعامل مع ValueError |
إذا أردت مراجعة التعامل مع الأخطاء، يمكنك قراءة درس: شرح try و except في Python والتعامل مع الأخطاء للمبتدئين.
روابط داخلية مفيدة
- أساسيات بايثون 11: شرح if و else في Python للمبتدئين
- أساسيات بايثون 13: شرح Functions في Python للمبتدئين
- أساسيات بايثون 23: شرح try و except في Python والتعامل مع الأخطاء
- أساسيات بايثون 16: شرح Lists في Python للمبتدئين
- محرر بايثون العرب لتجربة الأكواد أونلاين
روابط خارجية للتوسع
- توثيق Python الرسمي لجملة assert
- توثيق Python الرسمي لخطأ AssertionError
- درس الأخطاء والاستثناءات من توثيق Python الرسمي
تمرين بسيط على assert
اكتب دالة تستقبل قائمة أرقام، ثم استخدم assert للتأكد أن القائمة ليست فارغة قبل حساب المتوسط.
ابدأ بهذا الكود:
def average(numbers):
assert len(numbers) > 0, "لا يمكن حساب متوسط قائمة فارغة"
return sum(numbers) / len(numbers)
print(average([10, 20, 30]))
الناتج:
20.0
ثم جرّب:
print(average([]))
ستلاحظ ظهور رسالة AssertionError مع الرسالة التي كتبتها.
الخلاصة
تعلمنا في هذا الدرس أن assert في Python تُستخدم لاختبار صحة شرط أثناء التطوير. إذا كان الشرط صحيحًا يكمل البرنامج، وإذا كان الشرط خاطئًا يظهر خطأ AssertionError.
استخدم assert لاختبار افتراضات داخلية في الكود، مثل التأكد أن قيمة معينة منطقية أو أن نتيجة دالة تساوي المتوقع. لكن لا تستخدمها كبديل عن if في التحقق من إدخال المستخدم، ولا تعتمد عليها في الأمور الأمنية أو التحقق الأساسي في البرامج الحقيقية.
الخلاصة العملية:assertأداة ممتازة لاكتشاف الأخطاء أثناء التطوير، لكنها ليست بديلًا عنifأوtry exceptفي التعامل مع المستخدم والأخطاء الحقيقية. {alertSuccess}
أسئلة شائعة مع إجاباتها
ما معنى assert في Python؟
تعني التأكد من صحة شرط معين داخل الكود. إذا كان الشرط صحيحًا يستمر البرنامج، وإذا كان خاطئًا يظهر AssertionError.
متى أستخدم assert؟
استخدمها أثناء التطوير لاختبار افتراضات داخلية، مثل التأكد أن دالة تعطي نتيجة متوقعة أو أن قيمة معينة ليست غير منطقية.
هل assert بديل عن if؟
لا. if تستخدم لاتخاذ قرارات داخل البرنامج، أما assert فتستخدم غالبًا لاختبار افتراضات أثناء التطوير.
ما هو AssertionError؟
هو الخطأ الذي يظهر عندما يفشل شرط assert، أي عندما تكون نتيجة الشرط False.
هل أستخدم assert للتحقق من إدخال المستخدم؟
لا يفضل ذلك. الأفضل استخدام if أو try except للتحقق من إدخال المستخدم والتعامل مع الأخطاء بشكل واضح.
هل يمكن كتابة رسالة مع assert؟
نعم، يمكنك كتابة رسالة بعد الشرط باستخدام فاصلة، مثل: assert age >= 0, "العمر غير صحيح".




