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

การจัดการข้อยกเว้น
สรุปข้อยกเว้น

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

ไปที่สำนักงานและตรวจสอบให้แน่ใจว่าเงินทุนถูกจัดการอย่างถูกต้องโดยใช้โค้ดบล็อก 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 ในกล่องเพื่อทำระดับให้เสร็จสิ้น

หนังสือโค้ด