☰ خطة العام · تكنولوجيا المعلومات والاتصالات (بالعربية)

حين يخطئ الإدخال

الأسبوع 9 · الدرس ٥ «معالجة أخطاء مدخلات المستخدم في لغة Python»: ValueError وtry وexcept وإعادة المحاولة · 3 دروس
2

try وexcept: برنامج لا ينهار

ICT Prep 3 Term 1, Unit 1, Lesson 5: pp. 54–63
الهدفأستخدم ⁦try⁩ و⁦except⁩ ⁦ValueError⁩ ليعرض المدخل الخاطئ رسالة مفيدة وأعرف لماذا يُعد ⁦except⁩ من دون اسم عادة أضعف.
كلمات جديدة
⁦try⁩ · الكتلة التي تجرّب فيها بايثون الأسطر المحتمل أن تفشل⁦except⁩ · الكتلة التي تعمل إذا حدث الخطأ المسمىمعالجة الخطأ · التخطيط لما يفعله البرنامج حين يحدث خطأ⁦except⁩ بلا اسم · كتلة ⁦except⁩ بلا اسم خطأ؛ تلتقط كل الأخطاء
الشرح

تجعل كتلتا ⁦try⁩ و⁦except⁩ البرنامج هادئًا حين يحدث خطأ. تجرّب بايثون أولًا الأسطر الواقعة تحت ⁦try⁩. فإذا نجح كل شيء تُتخطى كتلة ⁦except⁩. وإذا حدث خطأ ⁦ValueError⁩ قفزت بايثون مباشرة إلى ⁦except ValueError⁩ ونفّذت أسطرها. وينبغي أن تقول الرسالة للمستخدم ما يفعله، مثل ⁦Please⁩ ⁦type⁩ ⁦digits⁩ ⁦only⁩، لا أن تكتفي بكلمة ⁦Error⁩. وهناك صيغة أقصر هي ⁦except⁩ بلا اسم خطأ. وهي تلتقط كل أنواع الأخطاء، حتى أخطاء الكتابة التي نرتكبها نحن داخل كتلة ⁦try⁩، ثم تعرض رسالة خاطئة. لذلك فالعادة الأفضل أن نسمّي الخطأ المتوقع. وانتبه إلى الشكل: ⁦try:⁩ و⁦except ValueError:⁩ كل منهما في سطر مستقل والكود تحتهما مزاح.

Python
1try:
2    books = int(input("How many books? "))
3    print("Next year:", books + 1)
4except ValueError:
5    print("Please type digits only.")
Output
How many books? seven
Please type digits only.
أمثلة محلولة
المكتوبتعرض الشاشة
"7"Next year: 8
"seven"Please type digits only.
"" (لا شيء)Please type digits only.
"5.5"Please type digits only.
يبين الجدول ما تعرضه الشاشة لأربع قيم مكتوبة. القيمة ⁦7⁩ وحدها عدد صحيح مكتوب بالأرقام. أما القيم الثلاث الأخرى فتذهب إلى كتلة ⁦except⁩.
Python
1try:
2    books = int(input("How many books? "))
3    print("Next year:", bookz + 1)
4except:
5    print("Please type digits only.")
Output
How many books? 7
Please type digits only.
يخفي ⁦except⁩ بلا اسم الخطأ. هنا كتب المبرمج ⁦bookz⁩ بدل ⁦books⁩. ويكتب المستخدم المدخل الجيد ⁦7⁩ لكن الشاشة تلوم المستخدم. ومع ⁦except ValueError⁩ كانت بايثون ستعرض الخطأ الحقيقي ⁦NameError⁩ ويُكتشف الخطأ.
نشاط الفصل

اكتب على الورق برنامج ⁦try⁩ و⁦except⁩ ⁦ValueError⁩ يسأل كم قلمًا هناك ويعرض العدد زائد ⁦10⁩. اكتب رسالة جيدة لكتلة ⁦except⁩. ثم قل ما تعرضه الشاشة للقيمتين المكتوبتين ⁦3⁩ و⁦three⁩.

تدرّب
1
ماذا يعرض البرنامج في الصورة للقيمة المكتوبة ⁦seven⁩؟
2
متى تُتخطى كتلة ⁦except⁩؟
3
لماذا الرسالة ⁦Please⁩ ⁦type⁩ ⁦digits⁩ ⁦only⁩ أفضل من ⁦Error⁩؟
4
لماذا يُعد ⁦except⁩ بلا اسم عادة أضعف؟