Coding for KidsCoding for Kids
ระดับสร้างสรรค์ความท้าทายคู่มือครู
โหวตสำหรับฟีเจอร์
หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ

การจัดการข้อยกเว้น
ปรับแต่งคลาส Exception

วัตถุประสงค์

ตรวจสอบน้ำฝนที่เก็บรวบรวมและตรวจสอบว่ามีการประมวลผลและถ่ายโอนอย่างถูกต้องโดยปรับแต่งคลาสข้อยกเว้น

ที่ปลายสุดของเขตหลังคา มีถังเก็บน้ำฝนที่เก็บรวบรวมไว้ น้ำนี้ถูกกรองและถ่ายโอนไปทั่วอาคารเพื่อวัตถุประสงค์ต่าง ๆ บางวาล์วบนผนังด้านบนควบคุมแรงดันของน้ำที่ไหล ในขณะที่ห้องเก็บของสุดท้ายมีเครื่องทำน้ำอุ่นหลายตัว การทำงานของเครื่องจักรอาจซับซ้อน แต่สามารถทำให้ดำเนินการได้อย่างมีประสิทธิภาพโดยการระบุรหัสข้อผิดพลาดและการตั้งค่ามาตรการแก้ไขที่มีประสิทธิภาพ ซึ่งทำได้โดยปรับแต่งคลาสข้อยกเว้นที่คุณสร้างขึ้นสำหรับข้อยกเว้นที่กำหนดเองของคุณ

มีคลาสข้อยกเว้นที่กำหนดเองสองตัวถูกตั้งค่าไว้ในตัวแก้ไขโค้ด ความสามารถของคุณในการใช้งานพวกมันจะเป็นสิ่งสำคัญในการแก้ไขปัญหาเครื่องจักรที่คุณพบ ตัวแรกเป็นข้อยกเว้นเพื่อแก้ไขปัญหาแรงดันน้ำ ซึ่งมีไว้เพื่อใช้งานร่วมกับวาล์วเพื่อให้แน่ใจว่าน้ำไหลอย่างถูกต้องเข้าสู่คอมเพล็กซ์หรือหากแรงดันต้องการการปรับเปลี่ยน ขึ้นอยู่กับว่าหากแรงดันต่ำกว่า 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 __str__(self): await player.write("[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 __str__(self): await player.write("[Error: %s {%s %s}]" % (self.error_code , self.message, self.temp)) return ("Temperature Corrected")

เริ่มต้น ให้เดินไปที่เครื่องหมาย X สีอ่อนบนพรมสีเขียวและหันไปที่ถังที่มีวาล์ว ซึ่งมีวาล์วสี่ (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: player.speak(x) else: player.speak( "Pressure is appropriate" )

ทำเช่นนี้บนเครื่องหมาย X สีอ่อนทั้งหมด โดยใช้คอนสแตนต์ตัวแปรที่สอดคล้องกับพรมสีแต่ละสีและตรวจสอบหรือปรับวาล์วแรงดันตามที่จำเป็น

เมื่อเสร็จแล้ว ให้เดินไปที่เครื่องหมาย X สีทองและใช้ฟังก์ชัน open() เพื่อเข้าถึงห้องเก็บของที่มีเครื่องทำน้ำอุ่น เมื่อเข้าไปแล้ว ให้เดินไปที่เครื่องหมาย X สีทองภายในห้องเก็บของและใช้ฟังก์ชัน read() เพื่ออ่านบันทึกบนเคาน์เตอร์ บันทึกนี้จะให้ข้อมูลเกี่ยวกับอุณหภูมิที่เหมาะสมสำหรับเครื่องทำน้ำอุ่นแต่ละตัว

เมื่อคุณมีข้อมูลเกี่ยวกับอุณหภูมิของแต่ละเครื่องแล้ว ให้เดินไปที่เครื่องหมาย X สีเข้มบนพรมสีม่วง ที่นี่เราจะใช้ชุดคำสั่ง try/except และ else เพื่อตรวจสอบว่าเครื่องทำน้ำอุ่นมีอุณหภูมิที่ถูกต้องหรือไม่ มีคอนสแตนต์ตัวแปรอีกสี่ค่าเกี่ยวข้องกับพรมสี: purple_temperature , yellow_temperature , pink_temperature และ white_temperature

ในชุดคำสั่งนี้ เราจะตรวจสอบว่าอุณหภูมิต่ำกว่า 100 หรือไม่ หากต่ำกว่า เราจะยกข้อยกเว้น TemperatureError ขึ้นมา ในฐานะข้อยกเว้นที่กำหนดเองซึ่งรับอาร์กิวเมนต์ ในกรณีนี้คุณต้องป้อนอุณหภูมิที่อ่านจากบันทึกเพื่อให้ดำเนินมาตรการแก้ไขข้อผิดพลาดได้อย่างถูกต้อง ตัวอย่างเช่น:

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

ทำเช่นนี้สำหรับเครื่องทำน้ำอุ่นทั้งหมด บนเครื่องหมาย X แต่ละจุดขณะหันหน้าไปยังเครื่องทำน้ำอุ่น ให้ดำเนินชุดคำสั่งโดยใช้คอนสแตนต์ตัวแปรที่ตรงกับพรมสีที่ถูกต้องเพื่อทำให้ระดับนี้เสร็จสมบูรณ์

หนังสือโค้ด