try و except: امنع البرنامج من الانهيار عند إدخال خاطئ
في الدروس السابقة كان البرنامج ينهار إذا كتب المستخدم سعرًا غير رقمي. الآن سنتعلم كيف نتعامل مع هذا الخطأ برسالة واضحة، ثم نعيد السؤال بدل أن يتوقف البرنامج.
ما النتيجة التي يجب أن تخرج بها؟
في نهاية الدرس ستفهم هذا الشكل:
try:
price = float(price_text)
except ValueError:
print("السعر غير صحيح، اكتب رقمًا فقط")
continue
معنى هذا الكود: جرّب تحويل النص إلى رقم. إذا فشل التحويل، اعرض رسالة واضحة وارجع لبداية الحلقة.
ما المشكلة التي نحلها؟
عند كتابة:
price = float(price_text)
يتوقع Python أن يكون النص قابلًا للتحويل إلى رقم، مثل:
50 99.5 120
لكن إذا كتب المستخدم:
abc خمسين 50 ريال
فلن يستطيع Python تحويل النص إلى رقم، وسيظهر خطأ اسمه:
ValueError
أنشئ ملف الدرس الخامس والعشرين
افتح مجلد الدورة داخل VS Code:
python_course
ثم أنشئ ملفًا جديدًا باسم:
lesson_25.py
افتح الملف داخل Editor.
جرّب الخطأ بدون try
اكتب هذا المثال:
price_text = input("اكتب السعر: ")
price = float(price_text)
print(price)
شغل البرنامج، ثم اكتب:
abc
ستلاحظ أن البرنامج يتوقف ويظهر خطأ. هذا ما نريد إصلاحه.
استخدم try و except
الآن عدّل المثال:
price_text = input("اكتب السعر: ")
try:
price = float(price_text)
print(price)
except ValueError:
print("السعر غير صحيح، اكتب رقمًا فقط")
أدخل try و except داخل مشروع المشتريات
في مشروعنا، السطر الذي قد يسبب خطأ هو:
price = float(price_text)
لذلك سنضعه داخل try:
try:
price = float(price_text)
except ValueError:
print("السعر غير صحيح، اكتب رقمًا فقط")
continue
رتّب الكود النهائي على أجزاء
الجزء الأول: دوال الحساب:
def calculate_tax(total):
return total * 0.15
def calculate_final_total(total, tax):
return total + tax
الجزء الثاني: دالة التقرير:
def print_report(products, total, tax, final_total):
print("----- تقرير المنتجات -----")
for product in products:
name = product["name"]
price = product["price"]
print(f"{name}: {price:.2f} ريال")
print(f"عدد المنتجات: {len(products)}")
print(f"الإجمالي قبل الضريبة: {total:.2f} ريال")
print(f"الضريبة: {tax:.2f} ريال")
print(f"الإجمالي النهائي: {final_total:.2f} ريال")
الجزء الثالث: المتغيرات الأساسية:
products = [] total = 0 name_prompt = "اسم المنتج أو done: " price_prompt = "سعر المنتج: "
الجزء الرابع: استقبال المنتجات مع حماية السعر:
أولًا: ابدأ الحلقة واقرأ اسم المنتج:
while True:
product_name = input(name_prompt).strip()
if product_name.lower() == "done":
break
ثانيًا: اقرأ السعر وحاول تحويله إلى رقم:
price_text = input(price_prompt).strip()
try:
price = float(price_text)
except ValueError:
print("السعر غير صحيح، اكتب رقمًا فقط")
continue
ثالثًا: إذا كان السعر صحيحًا، أنشئ المنتج وأضفه إلى القائمة:
product = {
"name": product_name,
"price": price
}
products.append(product)
total = total + price
الجزء الخامس: حساب النتائج واستدعاء التقرير:
tax = calculate_tax(total) final_total = calculate_final_total(total, tax) print_report(products, total, tax, final_total)
شغّل البرنامج
احفظ الملف:
Ctrl + S
ثم شغله:
python lesson_25.py
وإذا لم يعمل أمر python:
py lesson_25.py
اختبر البرنامج بإدخال خاطئ
جرّب هذه الإدخالات:
اسم المنتج أو done: Keyboard سعر المنتج: abc السعر غير صحيح، اكتب رقمًا فقط اسم المنتج أو done: Keyboard سعر المنتج: 100 اسم المنتج أو done: Mouse سعر المنتج: 50 اسم المنتج أو done: done
النتيجة المتوقعة:
----- تقرير المنتجات ----- Keyboard: 100.00 ريال Mouse: 50.00 ريال عدد المنتجات: 2 الإجمالي قبل الضريبة: 150.00 ريال الضريبة: 22.50 ريال الإجمالي النهائي: 172.50 ريال
تحدي صغير: امنع السعر السالب
بعد تحويل السعر إلى float، أضف هذا الفحص:
if price < 0:
print("السعر لا يمكن أن يكون سالبًا")
continue
اختبار نهاية الدرس
قبل الانتقال للدرس القادم، تأكد أنك فهمت هذه النقاط:
خلاصة الدرس
تعلمنا أن try و except تساعدنا على حماية البرنامج من أخطاء متوقعة. استخدمناها مع float حتى لا ينهار البرنامج عند إدخال سعر غير رقمي.
تذكر القاعدة:
try:
كود قد يسبب خطأ
except نوع_الخطأ:
ماذا نفعل عند حدوث الخطأ
في الدرس القادم سنبدأ تجهيز المشروع النهائي بشكل أوضح، ونراجع بنية البرنامج قبل إضافة تحسينات احترافية أخيرة.
💬 التعليقات
لا توجد تعليقات بعد.
🚫 يجب تسجيل الدخول لإضافة تعليق. دخول / تسجيل