الثانوية العامة 2026الاستعلام عن النتيجةاعرف الكليات المناسبة لمجموعكتنسيق 2026

الحاسب الآلي · الصف الثالث الإعدادي · الترم الأول

معالجة أخطاء المدخلات للمستخدم في لغة Python

أنواع الأخطاء في البرامج (الصياغة والتشغيل والمنطق)، والتحقق من مدخلات المستخدم، واستخدام try وexcept لمعالجة الاستثناءات مثل ValueError وZeroDivisionError، وتكرار طلب الإدخال حتى يكون صحيحًا.

آخر تحديث: · كيف نراجع المحتوى

أهداف التعلم

  • أن تميز بين أخطاء الصياغة وأخطاء التشغيل والأخطاء المنطقية.
  • أن تستخدم try وexcept لمعالجة أخطاء التشغيل.
  • أن تتعامل مع أخطاء محددة مثل ValueError وZeroDivisionError.
  • أن تكتب برنامجًا يكرر طلب الإدخال حتى يُدخل المستخدم قيمة صحيحة.

شرح الدرس

أنواع الأخطاء

النوعمتى يظهرمثال
خطأ الصياغة (Syntax Error)قبل التشغيل، لمخالفة قواعد اللغةنسيان النقطتين بعد if
خطأ التشغيل (Runtime Error / Exception)أثناء التشغيلتحويل النص "abc" إلى عدد
الخطأ المنطقي (Logic Error)البرنامج يعمل لكن النتيجة خاطئةكتابة + بدل *

هذا الدرس يركز على أخطاء التشغيل الناتجة غالبًا عن مدخلات المستخدم، وتسمى الاستثناءات.

ماذا يحدث بلا معالجة؟

age = int(input("Enter your age: "))

إذا أدخل المستخدم abc يتوقف البرنامج بالخطأ ValueError لأن int() لا تستطيع تحويل هذا النص إلى عدد صحيح.

جملة try و except

try:
    age = int(input("Enter your age: "))
    print("Next year you will be", age + 1)
except ValueError:
    print("Please enter a whole number.")

مخطط سريان try وexcept: بعد الأمر داخل try إذا لم يحدث خطأ يتابع البرنامج، وإذا حدث خطأ ينتقل التنفيذ إلى except لعرض رسالة بدل توقف البرنامج

  • يوضع الكود الذي قد يسبب خطأً داخل try.
  • إذا حدث الخطأ ينتقل التنفيذ فورًا إلى except بدل توقف البرنامج.
  • إذا لم يحدث خطأ تُتجاهل كتلة except.

معالجة أكثر من نوع

try:
    a = int(input("First number: "))
    b = int(input("Second number: "))
    print("Result:", a / b)
except ValueError:
    print("Numbers only, please.")
except ZeroDivisionError:
    print("You cannot divide by zero.")

ويمكن إضافة else تُنفذ عند عدم حدوث خطأ، وfinally تُنفذ في كل الأحوال.

التحقق من المدخلات وتكرار الطلب

نجمع try مع حلقة while لإعادة السؤال حتى يُدخل المستخدم قيمة صحيحة ومقبولة:

while True:
    try:
        grade = int(input("Enter grade (0-100): "))
        if 0 <= grade <= 100:
            break
        print("Grade must be between 0 and 100.")
    except ValueError:
        print("That is not a number. Try again.")

print("Saved grade:", grade)

لاحظ نوعين من التحقق: تحقق النوع (هل هو عدد؟) بواسطة try، وتحقق المدى (هل هو بين 00 و100100؟) بواسطة if.

دالة إدخال آمنة

يمكن وضع هذا المنطق في دالة لإعادة استخدامه:

def read_int(message, low, high):
    while True:
        try:
            value = int(input(message))
            if low <= value <= high:
                return value
            print("Out of range.")
        except ValueError:
            print("Invalid number.")

age = read_int("Age: ", 5, 20)

أمثلة وتطبيقات

موقف: آلة حاسبة لمتوسط ثلاث درجات تقبل الأرقام العشرية.

total = 0
count = 0
while count < 3:
    try:
        total += float(input("Grade: "))
        count += 1
    except ValueError:
        print("Enter a valid number.")
print("Average:", total / 3)

ملاحظات مهمة

  • حدد نوع الخطأ في except قدر الإمكان؛ except: وحدها تخفي أخطاء لا تتوقعها.
  • try لا تكتشف الأخطاء المنطقية؛ هذه تحتاج إلى اختبار البرنامج بقيم معروفة النتائج.
  • اكتب رسالة خطأ واضحة تخبر المستخدم بما يجب فعله.

تطبيق إضافي: إذا أدخل المستخدم 0 مقامًا للكسر، فالتحويل إلى عدد ينجح لكن القسمة تثير ZeroDivisionError. وإذا أدخل كلمة بدل العدد يحدث ValueError. لذلك يمكن لكل except عرض رسالة محددة تساعد المستخدم على التصحيح، بدل رسالة عامة لا توضّح المشكلة.

خطأ شائع: وضع البرنامج كله داخل كتلة try. الأفضل أن تشمل الكتلة العملية المتوقع فشلها فقط؛ فهذا يجعل سبب الخطأ أوضح ويمنع إخفاء أخطاء برمجية أخرى تحتاج إلى إصلاح.

المفاهيم الأساسية

  • ثلاثة أنواع للأخطاء: صياغة وتشغيل ومنطق.
  • try تحيط بالكود المحتمل الخطأ، وexcept تعالجه.
  • ValueError عند تحويل نص غير صالح، وZeroDivisionError عند القسمة على صفر.
  • while True مع break لتكرار الطلب حتى يصح الإدخال.

ملخص الدرس

البرامج تتعامل مع مستخدمين قد يدخلون قيمًا غير متوقعة، فنستخدم try وexcept لالتقاط أخطاء التشغيل ومعالجتها برسائل واضحة بدل توقف البرنامج، ونضيف شروط تحقق المدى، ونكرر الطلب في حلقة حتى نحصل على مدخلات صحيحة.

أسئلة للتدريب

  1. صنّف الخطأ: برنامج يحسب مساحة الدائرة بضرب نصف القطر في 22 بدل تربيعه.
  2. ما الخطأ الذي يظهر عند تنفيذ int("12a")؟
  3. اكتب برنامجًا يطلب عددين ويطبع ناتج قسمتهما مع معالجة القسمة على صفر.
  4. عدّل برنامج الدرجة ليقبل الدرجات من 00 إلى 5050 فقط.
  5. ما الفرق بين تحقق النوع وتحقق المدى؟
حلّ أسئلة هذا الدرساختبر فهمك بأسئلة اختيار من متعدد وأسئلة مقالية مع نموذج إجابة، أو خض اختبارًا تفاعليًا سريعًا
أبلغ عن خطأ في هذا الدرس