Coding for KidsCoding for Kids
المستويات الإبداعيةالتحدياتدليل المعلم
صوت للميزات
دورة تطوير بايثون المتقدمة
الفصل
>
المستوى

معالجة الاستثناءات
خاتمة الاستثناء

الهدف

اذهب إلى المكتب وتأكد من توازن المعروض النقدي بشكل صحيح باستخدام كتلة الشيفرة finally وكلمة المفتاح assert.

في أعماق الطابق الثاني يوجد مكتب مخصص لتخزين الأموال للاستثمارات المستقبلية للمزرعة. آن الأوان للتفقد والتأكد من توازن الحسابات. عند التعامل مع الأرقام، من المحتمل حدوث أخطاء رياضية ومشاكل أخرى، لذا فإن معالجة الاستثناءات تعد فكرة جيدة لالتقاط وحل هذه الأخطاء.

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

ابدأ بالتوجه نحو علامة X الخفيفة أمام باب المكتب واستخدام دالة open() لفتح الباب للدخول. بمجرد الدخول، اتجه نحو علامة X الذهبية واستخدم دالة collect() لالتقاط ثابتين مختلفين مسميين: categories و savings. الثابت categories هو قائمة تحتوي على معروض الأموال للثلاث فئات، المسماة: "exports"، "imports"، "stock"، التي تحتاج إلى التحقق منها. الثابت savings هو متغير يحتوي على معروض الأموال الذي قد يكون ضرورياً لضمان توفير الخزائن بالكمية اللازمة.

الآن وبعد جمع جميع العناصر الضرورية، حان الوقت لموازنة معروض الأموال المخزن في الأكياس التي سيتم جمعها وتوزيعها بواسطة موظف في وقت لاحق بعد انتهائك. اتجه نحو علامة X الداكنة فوق السجادة الزرقاء، وعلى علامات X فوق السجادات الزرقاء، الصفراء و الحمراء. هنا سنستخدم القائمة الثابتة categories للتحقق من أن كل كيس يحتوي على جميع المكونات الضرورية قبل شحنه.

من المفترض أن يحتوي كل كيس على المكونات الموجودة داخل القائمة categories. هناك ثلاثة ثوابت من نوع القاموس تقابل كل كيس: blue_sack، yellow_sack و red_sack. قم بتشغيل حلقة for أثناء الوقوف على علامة X فوق السجادة الزرقاء للتحقق من أن الكيس يحتوي على جميع المواد المطلوبة ثم تأكيد حساب المعروض النقدي.

for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")

بعض الأكياس يجب أن تحتوي على جميع المواد المطلوبة، ولكن كما هو الحال عادة في هذه التمارين، قد تواجه خطأ. إذا واجهت مشكلة يجب عليك استخدام كتلات الشيفرة try / except لالتقاط الخطأ، وفي هذه الحالة يكون الخطأ KeyError: الذي يحدث إذا لم يتم العثور على مفتاح في القاموس. عند حدوث ذلك، نضيف أيضاً finally إلى الاستثناء، الذي ينهي التعامل مع الاستثناء بإضافة كود يتم تنفيذه دائماً في نهاية معالجة الاستثناء. على عكس الاستثناءات، لا يمكن أن يكون هناك سوى كتلة finally واحدة لكل try. على سبيل المثال، في حالة blue_sack:

try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")

كرر هذه العملية على علامات X الداكنة فوق السجادات الصفراء و الحمراء، باستخدام ثوابت القاموس yellow_sack و red_sack. قد لا يكون ذلك ضرورياً في بعض الحالات حيث يحدث الخطأ فقط إذا كان هناك نقص في أحد العناصر في الأكياس.

الآن وبعد التحقق من الأكياس، حان الوقت للانتقال إلى الصناديق الموجودة أمام السجادات: الخضراء، البنفسجية و البرتقالية. هنا يجب علينا التأكد من أن معروض الأموال هو بالضبط 30 في كل صندوق ثم إغلاقه بعد ذلك. هناك ثلاثة ثوابت متغيرة تقابل كل صندوق، مسماة: green_chest، purple_chest، و orange_chest.

أكبر مشكلة في التحقق من الصناديق هي أننا لا نعرف محتوياتها بالضبط. عند التعامل مع قيم غير معروفة، يمكنك استخدام كلمة المفتاح assert. تتيح لك هذه الكلمة التحقق مما إذا كانت العبارة التي تعلن عنها صحيحة أم خاطئة، وهذا مفيد جداً لفحص أخطاء الكود. تُستخدم كلمة المفتاح assert مع: try، except، else و final وتوليفاتها المختلفة لإصلاح الكود الذي يحتوي على أخطاء. على سبيل المثال، في حالة green_chest:

try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()

في الكود أعلاه، نتحقق مما إذا كان green_chest يحتوي على الكمية الصحيحة من معروض الأموال باستخدام كلمة المفتاح assert. إذا لم يحتوي على الكمية الصحيحة، يتم تفعيل كتلة except ونحسب ثم نطرح المعروض الناقص من المتغير savings ونضيفه إلى الصندوق. إذا كانت الكمية مكتملة، يتم تفعيل كتلة else ويتم التأكيد على احتساب جميع الأصول. بمجرد التحقق من كل شيء، يتم تنفيذ كتلة finally ويتم استدعاء دالة close() لإغلاق الصندوق.

على علامات X الموجودة فوق السجادات الخضراء، البنفسجية و البرتقالية، واجه الصناديق وقم بتشغيل التحقق باستخدام: green_chest، purple_chest، orange_chest على السجادات ذات الألوان المقابلة. بمجرد الانتهاء، توجه إلى علامة X الخفيفة واستخدم دالة place() لتخزين باقي المتغير savings في الصندوق لتكملة المستوى.

كتاب الكود