หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ
การจัดการข้อยกเว้น
ข้อยกเว้นหลายรายการ
วัตถุประสงค์
รวบรวมและจัดเก็บอุปกรณ์การแพทย์บางอย่างในกล่องอย่างถูกต้องโดยใช้หลายข้อยกเว้น
โกดังบนหลังคาต้องได้รับการเติมเต็มใหม่ เนื่องจากวัสดุบางอย่างถูกใช้งานไปแต่ไม่เคยมีการทดแทนใหม่ มีใบสั่งซื้อวัสดุเพิ่มเติมในบันทึกในหนึ่งในโกดัง ซึ่งจะเป็นความคิดที่ดีในการจัดการให้เรียบร้อย กล่าวคือ มีวัสดุหลากหลายชนิดที่ต้องรวบรวมและจัดเก็บในกล่อง
เนื่องจากมีประเภทข้อมูลและจำนวนวัสดุต่าง ๆ ที่จำเป็นต้องใช้ในการเติมกล่อง เราอาจพบข้อผิดพลาดต่าง ๆ เราสามารถใช้ try / except เพื่อจับข้อผิดพลาดที่อาจเกิดขึ้นและแก้ไขปัญหาบางอย่าง แต่จะเกิดอะไรขึ้นเมื่อมีข้อผิดพลาดหลายอย่างที่อาจเผชิญในการดำเนินการครั้งเดียว? เพื่อแก้ไขปัญหานี้ เราสามารถระบุข้อยกเว้นที่เราต้องการจับและใช้หลายข้อยกเว้น
เริ่มต้นโดยเดินไปที่เครื่องหมาย X สีทองและหันหน้าเข้าประตู ใช้ฟังก์ชัน open() เพื่อเข้าไปในโกดัง เมื่ออยู่ภายในแล้วเดินไปที่เครื่องหมาย X สีเข้มและเลี้ยวไปทางขวาเพื่อใช้ฟังก์ชัน read() และตรวจสอบว่าวัสดุและจำนวนที่สั่งในบันทึกบนโต๊ะเป็นอย่างไร ข้อมูลเกี่ยวกับคอนสแตนต์ของรายการถูกเขียนไว้ในบันทึก รวมถึงวัสดุและคำสั่งซื้อของพวกมัน เมื่อเสร็จแล้วเดินไปที่เครื่องหมาย X สีอ่อนภายในโกดัง หันไปที่กล่องและหยิบคอนสแตนต์รายการ pads ของวัสดุภายในโดยใช้ฟังก์ชัน collect() เช่นนี้: player.collect(pads)
ภายในโกดังมีการเก็บของ "peroxide" และ "isopropyl" ให้เดินและรวบรวมทั้งหมด จากนั้นออกไปข้างนอกและมุ่งหน้าไปยังเครื่องหมาย X สีเข้มบนพรมสีม่วง บนพรมสีม่วง ในขณะที่หันหน้าเข้ากล่อง ให้ใช้ฟังก์ชัน collect() เพื่อหยิบ "water bottle" แล้วเดินต่อไปยังเครื่องหมาย X สีเข้มบนพรมสีเหลืองและใช้ฟังก์ชัน collect() เพื่อหยิบ "glass bottle"
ตอนนี้ที่วัสดุถูกรวบรวมแล้ว ได้ถึงเวลาส่งคำสั่งและวางวัสดุทั้งหมดภายในกล่องในโกดังทางด้านขวา ในการทำเช่นนี้ เราจะเริ่มต้นโดยการจัดเก็บ "water bottle", "peroxide" และ "isopropyl" ไว้ในรายการที่ชื่อว่า supplies บนเครื่องหมาย X สีเข้มที่อยู่บนพรมสี red, green และ blue เราจะใช้กล่องเพื่อเก็บอุปกรณ์การแพทย์ สำหรับงานนี้เราจะตั้งค่ารายการสามรายการ: blue_crate = [], green_crate = [] และ red_crate = []
ก่อนที่จะวางสิ่งของทั้งหมด เราต้องเติมข้อมูลในทุกรายการให้ครบถ้วน โดยในงานนี้เราจะใช้ลูปเพื่อวนรอบรายการและรวมพวกมันเป็นรายการเดียว ซึ่งจะรวม supplies ทั้งหมดไว้ในรายการและจะแบ่งจำนวนของรายการ pads ตาม order ที่อยู่ในบันทึกในโกดัง
for x in range(5): blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x])
แม้จะทำตามนี้แล้วคุณจะสังเกตเห็นว่ามีข้อผิดพลาดเกิดขึ้น ทั้งที่ทุกอย่างได้ดำเนินการอย่างถูกต้องและโค้ดนั้นก็ถูกต้อง แต่มีปัญหาว่า รายการ supplies มีเพียงสาม (3) รายการเท่านั้น แต่ลูปกลับทำงานห้า (5) ครั้ง ทำให้เกิด Index Error ในขณะที่รายการ pads นอกจากจะมีเพียงสาม (3) รายการแล้ว ยังมีหนึ่งในค่าของ order เป็น 0 ซึ่งการหารด้วย 0 ทำให้เกิด Zero Division Error เพราะไม่สามารถหารด้วย 0 ในทางคณิตศาสตร์
นี่คือจุดที่หลายข้อยกเว้นมีประโยชน์ เราใช้บล็อกโค้ด try / except เพื่อจับข้อผิดพลาดและให้เราสามารถดำเนินการโค้ดต่อได้ เมื่อเกิดข้อผิดพลาดสองแบบ เราต้องระบุข้อผิดพลาดแต่ละประเภทเพื่อที่จะจับข้อยกเว้นเฉพาะได้ ซึ่งทำได้โดยการขยายบล็อก except ในลักษณะนี้: except IndexError: และ except ZeroDivisionError: ตัวอย่างเช่น:
for x in range(5): try: blue_crate.append(supplies[x]) blue_crate.append(pads[x]/order[x]) except IndexError: blue_crate.append("glass bottle") except ZeroDivisionError: blue_crate.append(0)
Index Error ถูกแก้ไขโดยการเติมเต็มตำแหน่งที่ขาดในรายการด้วย "glass bottle" และ Zero Division Error ถูกแก้ไขโดยการเพิ่มค่า 0 หากเกิดการดำเนินการที่ผิดกฎหมาย
ทำเช่นนี้สำหรับรายการ blue_crate = [], green_crate = [] และ red_crate = [] เดินไปที่เครื่องหมาย X สีเข้มบนพรม blue, green และ red แล้วใช้ฟังก์ชัน place() เพื่อจัดเก็บรายการเหล่านั้นในกล่องที่สอดคล้องกันเพื่อทำให้ระดับนี้สมบูรณ์