دورة تطوير بايثون المتقدمة
الفصل
>
المستوى

معالجة الاستثناءات
تخصيص فئات الاستثناء

الهدف

تحقق من مياه المطر المجموعة وتأكد من معالجتها ونقلها بشكل صحيح عن طريق تخصيص فئات الاستثناء.

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

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

class PressureError(Exception): def __init__(self, pressure, message="Water pressure is offset, pressure is: ", error_code=404): self.pressure = pressure self.message = message self.error_code = error_code super().__init__(self.message) async def eval(self): await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.pressure)) if self.pressure < 100: return ("Valve has been closed") if self.pressure > 360: return ("Valve has been opened")

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

class TemperatureError(Exception): def __init__(self, temp, message="Temperature is not appropiate, enter new temperature: ", error_code=808): self.temp = temp self.message = message self.error_code = error_code super().__init__(self.message) async def eval(self): await player.display("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp)) return ("Temperature Corrected")

لبدء المهمة، توجه إلى علامة X الضوئية فوق السجادة الخضراء وواجه الخزان الذي يحتوي على صمام؛ حيث توجد أربع (4) من هذه الصمامات التي تنظم ضغط المياه المضخوخة من الصهريج. يوجد أربع (4) ثوابت متغيرة: green_pressure، red_pressure، blue_pressure وorange_pressure، حيث تحمل كل منها ضغط خزان السجادة الملونة المقابلة.

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

try: if green_pressure < 100 or green_pressure > 360: raise PressureError(green_pressure) except PressureError as x: error = await x.eval() player.speak(error) else: player.speak( "Pressure is appropriate" )

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

بمجرد الانتهاء، توجه إلى علامة X الذهبية واستخدم الدالة open() للوصول إلى غرفة التخزين التي تحتوي على سخان الماء. وبمجرد الدخول، توجه إلى علامة X الذهبية الموجودة داخل غرفة التخزين واستخدم الدالة read() لقراءة المذكرة الموجودة على العداد. ستوفر لك هذه المذكرة معلومات حول درجة الحرارة المثالية لكل من سخانات الماء.

بمجرد الحصول على المعلومات حول كل درجة حرارة، توجه إلى علامة X الداكنة فوق السجادة البنفسجية، حيث سنستخدم تسلسل كتل الشفرة try/except وelse للتحقق من أن سخانات الماء تعمل بدرجة الحرارة الصحيحة. هناك أربع (4) ثوابت متغيرة إضافية مرتبطة بالسجاد الملونة: purple_temperature، yellow_temperature، pink_temperature وwhite_temperature.

في هذا التسلسل سنتحقق مما إذا كانت درجة الحرارة أقل من 100، وإذا كانت كذلك سنرفع استثناء TemperatureError. وكاستثناء مخصص، يأخذ وسيطًا؛ في هذه الحالة يجب عليك إدخال درجة الحرارة المقروءة في المذكرة من أجل تنفيذ إجراء الاستثناء المخصص لتصحيح المشكلة بشكل صحيح. على سبيل المثال:

try: if purple_temperature < 100: raise TemperatureError(120) except TemperatureError as x: error = await x.eval() player.speak(error) else: player.speak( "Temperature is ok" )

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

كتاب الكود