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

การจัดการข้อยกเว้น
ข้อยกเว้นที่กำหนดเอง

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

ใช้งาน custom exceptions เพื่อรวบรวมข้อความที่เกี่ยวกับคำสั่งซื้อสินค้าและส่งออกไปผ่านนกพิราบขนส่ง

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

Custom exceptions ถูกจัดขึ้นโดยการสร้างคลาส โดยการเพิ่มส่วน (Exception) คุณสามารถนำคลาสมาใช้ใหม่สำหรับจัดการ exceptions สำหรับวัตถุประสงค์ของเรา เราจะสร้างสองตัว ได้แก่ InvalidLocation ซึ่งจะถูกกระตุ้นขึ้นเมื่อสตริงเฉพาะไม่ผ่านการตรวจสอบ และ UnsuitableSelection ซึ่งใช้เพื่อตรวจสอบว่าตัวเลขเกินค่าที่กำหนดหรือไม่

class InvalidLocation(Exception): "Raised when location is invalid" pass class UnsuitableSelection(Exception): "Raised when pidgeon is 2 or younger" pass

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

มีค่าคงที่ตัวแปร (variable constants) สี่ตัวที่ใช้ในส่วนนี้: red_memo, blue_memo, green_memo และ orange_memo เฉพาะบันทึกข้อความที่ถูกระบุให้ส่งถึงภาค "west" เท่านั้นที่จะถูกเก็บเพื่อส่งออก ในการตัดสินใจว่าจะรับบันทึกข้อความหรือไม่ เราจะใช้โค้ดบล็อค try/except และ else ร่วมกับ custom exception InvalidLocation ในการใช้ custom exception ให้ตรวจสอบใน try ว่าบันทึกข้อความมีป้าย "west" และหากไม่ใช่ให้เรียกใช้ exception ส่วน except จะยืนยันว่าบันทึกข้อความไม่ถูกต้อง และใน else จะรวบรวมและเพิ่มบันทึกข้อความไปยังรายการ prep หากมันถูกกำหนดให้ส่งถึงภาค "west" ตัวอย่างเช่น:

try: if red_memo != "west": raise InvalidLocation except InvalidLocation: player.speak("This is not an order that needs to be sent out") else: player.collect(red_memo) prep.append(red_memo)

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

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

เดินไปยังจุด X สีเข้มเหนือพรมสีม่วง บนคอก เราจะตรวจสอบว่านกพิราบมีอายุพอที่จะบินส่งข้อความหรือไม่ หรือเป็นลูกนกที่ยังไม่สามารถส่งได้ มีค่าคงที่ตัวแปรอีกสี่ตัวที่จะถูกใช้ในส่วนนี้: purple_pen, yellow_pen, white_pen และ pink_pen ซึ่งสอดคล้องกับพรมแต่ละสี เราจะใช้เทคนิคเดียวกับบันทึกข้อความ โดยใช้งานคลาสตัวที่สองที่ได้ตั้งค่าไว้

ใช้โค้ดบล็อค try/except และ else ร่วมกับ custom exception UnsuitableSelection เพื่อตรวจสอบว่านกพิราบมีอายุพอที่จะส่งข้อความหรือไม่ ในบล็อค try จะตรวจสอบว่าค่าคงที่ตัวแปรที่แทนคอกมีนกพิราบที่เหมาะสมโดยการเช็คว่านกมีอายุน้อยกว่าสอง (2) ปีหรือไม่ หากนกพิราบไม่เหมาะสม บล็อค except จะถูกเรียกใช้งาน มิฉะนั้น บล็อค else จะถูกกระตุ้นเพื่อให้คุณเพิ่มนกพิราบลงในรายการ prep เพื่อส่งข้อความ

try: if purple_pen <= 2: raise UnsuitableSelection except UnsuitableSelection: player.speak("Pigeon unsuitable to deliver") else: prep.append(purple_pen) player.speak("Pigeon Collected")

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

หนังสือโค้ด