Python KeyError ปรากฏขึ้นเมื่อคุณพยายามเข้าถึงรายการในพจนานุกรมที่ไม่มีอยู่ คุณสามารถแก้ไขข้อผิดพลาดนี้ได้โดยแก้ไขโปรแกรมของคุณเพื่อเลือกรายการจากพจนานุกรมที่มีอยู่ หรือจัดการข้อผิดพลาดนี้ได้โดยตรวจสอบว่ามีคีย์ก่อนหรือไม่
วิธีจัดการกับ Python KeyError
คุณเพิ่งได้รับการต้อนรับจาก KeyError หรือไม่? ไม่ต้องกังวล! เมื่อเกิด KeyError ขึ้น แสดงว่าคุณกำลังพยายามเข้าถึงคีย์ภายในพจนานุกรมที่ไม่มีอยู่ ส่งต่อและแก้ไขข้อผิดพลาดนี้ได้ง่ายๆ เมื่อคุณรู้วิธี
KeyErrors สามารถจัดการได้โดยใช้การลอง…ยกเว้นการบล็อก การใช้คีย์เวิร์ด “ใน” หรือโดยการตรวจสอบคีย์ล่วงหน้าโดยใช้การจัดทำดัชนี
ในคู่มือนี้ เราจะพูดถึงว่า Python KeyErrors คืออะไรและเหตุใดจึงเกิดขึ้น เราจะอธิบายตัวอย่างข้อผิดพลาดและวิธีแก้ไข เพื่อให้คุณทราบวิธีจัดการกับ KeyErrors ในอนาคต
เริ่มกันเลย!
Python KeyError คืออะไร
Python KeyError เกิดขึ้นเมื่อคุณพยายามเข้าถึงรายการในพจนานุกรมที่ไม่มีอยู่โดยใช้ไวยากรณ์การจัดทำดัชนี ข้อผิดพลาดนี้เกิดขึ้นเนื่องจาก Python ไม่สามารถคืนค่าสำหรับรายการที่ไม่มีอยู่ในพจนานุกรมได้
พจนานุกรม Python คือชุดของคู่คีย์-ค่าที่จัดเก็บไว้ในวงเล็บปีกกา ({}):
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" }
กุญแจสำคัญคือ "ชื่อ" "ราคา" และ "RAM" คีย์จะปรากฏหน้าเครื่องหมายทวิภาคในพจนานุกรม
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
มาดูกันว่าจะเกิดอะไรขึ้นหากเราพยายามดึงจำนวนพอร์ต USB ในพจนานุกรมของเรา:
print(raspberry_pi["usb_ports"])
รหัสของเราส่งคืน:
KeyError: 'usb_ports'
ข้อผิดพลาดนี้บอกเราว่าไม่มีคีย์ที่เราระบุ ในกรณีนี้ คีย์ที่หายไปคือ “usb_ports”
KeyError Python:วิธีแก้ปัญหา
ในการจัดการกับ KeyError ของพจนานุกรม Python คุณสามารถ:
- ตรวจสอบคีย์ล่วงหน้าโดยใช้การจัดทำดัชนี
- ใช้คีย์เวิร์ด "ใน" เพื่อตรวจสอบคีย์
- ลองใช้…ยกเว้นบล็อก
วิธีแก้ปัญหาในการจัดการ KeyError ที่ได้ผลดีที่สุดสำหรับคุณนั้นจะแตกต่างกันไปตามกรณีการใช้งานของคุณ
ใช้พจนานุกรม get() วิธีการ
พจนานุกรม Python get() วิธีการส่งกลับค่าในพจนานุกรม คุณสามารถระบุค่าเริ่มต้นด้วยเมธอด get() ค่าเริ่มต้นนี้จะถูกส่งคืนหากชื่อของคีย์ที่คุณระบุไม่มีค่า
พิจารณารหัสต่อไปนี้:
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" } get_key = input("What information would you like to retrieve (name, price, RAM)? ") print("The {} for this computer is {}.".format(get_key, raspberry_pi.get(get_key, "not available"))
มารันโค้ดของเราโดยใช้ล่าม Python และดูว่าเกิดอะไรขึ้น:
What information would you like to retrieve? ALU The ALU for this computer is not available.
รหัสของเราใช้วิธี get() ของพจนานุกรมเพื่อดึง “ALU” จากพจนานุกรมของเรา ไม่มีค่าที่สอดคล้องกับชื่อคีย์นี้ เมธอด get() ส่งคืนค่าดีฟอลต์ที่เรากำหนด ซึ่ง "ไม่พร้อมใช้งาน"
ตรวจสอบคีย์ล่วงหน้าโดยใช้การจัดทำดัชนี
คุณสามารถตรวจสอบการมีอยู่ของคีย์ได้โดยใช้การจัดทำดัชนีเพื่อหลีกเลี่ยงการพบ KeyError หากคีย์อยู่ในพจนานุกรม คุณสามารถใช้คีย์นั้นได้ มิฉะนั้น คุณสามารถสั่งให้โปรแกรมของคุณทำอย่างอื่นที่ไม่ขึ้นอยู่กับคีย์นั้น
มาเขียนโปรแกรมที่เข้าถึงคีย์ในพจนานุกรม “raspberry_pi” ใน Python กัน ตรวจสอบว่าคีย์ของเราอยู่ในพจนานุกรมของเราโดยใช้การจัดทำดัชนีหรือไม่:
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" } get_key = input("What information would you like to retrieve (name, price, RAM)? ") if raspberry_pi[get_key]: print("The {} for this computer is {}.".format(get_key, raspberry_pi[get_key])) else: print("This information is not available.")
เราใช้คำสั่ง Python “if” เพื่อตรวจสอบว่าคีย์ของเรามีอยู่จริงหรือไม่ “raspberry_pi[get_key]” จะคืนค่าเฉพาะเมื่อมีคีย์เท่านั้น ซึ่งหมายความว่าหากคีย์ของเรามีอยู่ คำสั่ง "if" ของเราจะทำงาน หากไม่มีคีย์ของเรา คำสั่ง "else" จะดำเนินการ
มาลองค้นหา RAM สำหรับ Raspberry Pi ของเรากัน:
What information would you like to retrieve (name, price, RAM)? RAM The RAM for this computer is 4GB.
ตอนนี้ เรามาลองดูว่าคอมพิวเตอร์มีพอร์ต USB จำนวนเท่าใด:
What information would you like to retrieve (name, price, RAM)? USB This information is not available.
รหัสของเราไม่ทำให้เกิด KeyError! เนื่องจากเราได้ตรวจสอบว่าคีย์ของเรามีอยู่ก่อนใช้งานหรือไม่ หากเราใช้ raspberry_pi[get_key] ในคำสั่ง “else” โค้ดของเราจะส่งคืน KeyError
กำลังลองใช้…ยกเว้นบล็อก
Python ลอง…ยกเว้นบล็อกจะพยายามเรียกใช้โค้ดหนึ่งบรรทัด หากไม่สามารถเรียกใช้โค้ดบรรทัดนั้นได้ รหัสของเราจะแสดงข้อผิดพลาดที่กำหนดเองตามข้อยกเว้นที่คุณระบุไว้
เราสามารถใช้การลอง…ยกเว้นการบล็อกเพื่อระบุการมีอยู่ของข้อผิดพลาดและหยุด KeyError ที่ไม่คาดคิดจากการช่วยเหลือโปรแกรม Python ของเรา
มากำหนดข้อผิดพลาดที่กำหนดเองสำหรับตัวอย่างคอมพิวเตอร์ของเราจากก่อนหน้านี้โดยใช้การลอง…ยกเว้นการบล็อก:
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" } get_key = input("What information would you like to retrieve (name, price, RAM)? ") try: print("The {} for this computer is {}.".format(get_key, raspberry_pi[get_key])) except KeyError: print("This information is not available.")
เราใช้การลอง…ยกเว้นบล็อกเพื่อพยายามพิมพ์ข้อมูลเฉพาะเกี่ยวกับคอมพิวเตอร์ Raspberry Pi ไปยังคอนโซล หากโค้ดของเราทำให้เกิด KeyError ที่ใดก็ได้ในบล็อก "ลอง" โค้ดของเราจะรันเนื้อหาของบล็อก "ยกเว้น"
ซึ่งหมายความว่าทุกครั้งที่มีการเพิ่ม KeyError "ข้อมูลนี้ไม่พร้อมใช้งาน" จะถูกพิมพ์ไปยังคอนโซล เรามาลองค้นหาชื่อคอมพิวเตอร์กัน:
What information would you like to retrieve (name, price, RAM)? name The name for this computer is Raspberry Pi 4.
ตอนนี้ มาลองเรียนรู้เกี่ยวกับความพร้อมใช้งานของพอร์ต USB ของคอมพิวเตอร์กัน:
What information would you like to retrieve (name, price, RAM)? USB This information is not available.
รหัสของเราทำให้เกิด KeyError ภายในบล็อก "ลอง" ของเรา ซึ่งทำให้โค้ดของเรารันบล็อก "ยกเว้น" ของโค้ด
ตรวจสอบรหัสล่วงหน้าโดยใช้ใน
คีย์เวิร์ด "ใน" เป็นหนึ่งในตัวดำเนินการสมาชิกของ Python ตรวจสอบว่ารายการอยู่ในรายการค่าหรือไม่ คุณสามารถใช้คีย์เวิร์ด “in” เพื่อตรวจสอบว่าคีย์อยู่ในพจนานุกรมหรือไม่
โปรแกรมนี้จะตรวจสอบว่ามีคีย์อยู่หรือไม่ก่อนที่จะพิมพ์ค่าไปที่คอนโซล:
raspberry_pi = { "name": "Raspberry Pi 4", "price": 35.00, "RAM": "4GB" } get_key = input("What information would you like to retrieve (name, price, RAM)? ") if get_key in raspberry_pi: print("The {} for this computer is {}.".format(get_key, raspberry_pi[get_key])) else: print("This information is not available.")
รหัสนี้จะตรวจสอบว่าค่าของ "get_key" เป็นคีย์ในพจนานุกรม "raspberry_pi" หรือไม่ หากมีคีย์อยู่ คำสั่ง "if" จะทำงาน มิฉะนั้น คำสั่ง “else” จะทำงาน เรามาลองตรวจสอบข้อมูลเกี่ยวกับ CPU ของคอมพิวเตอร์กัน:
What information would you like to retrieve (name, price, RAM)? CPU This information is not available.
มาเช็คชื่อคอมพิวเตอร์กัน:
What information would you like to retrieve (name, price, RAM)? name The name for this computer is Raspberry Pi 4.
รหัสของเราใช้งานได้! เมื่อเราค้นหาคีย์ที่ไม่มีอยู่ คำสั่ง "อื่น" จะทำงาน ซึ่งหมายความว่าไม่มี KeyError เกิดขึ้นในโค้ดของเรา เนื่องจากเราไม่ได้พยายามเข้าถึงคีย์ในบล็อก "อื่น"
รหัสของเราใช้งานได้! เมื่อเราค้นหาคีย์ที่ไม่มีอยู่ คำสั่ง "อื่น" จะทำงาน ซึ่งหมายความว่าไม่มี KeyError เกิดขึ้นในโค้ดของเรา เนื่องจากเราไม่ได้พยายามเข้าถึงคีย์ในบล็อก "อื่น"
บทสรุป
KeyError ปรากฏขึ้นเมื่อคุณพยายามเข้าถึงค่าจากพจนานุกรมที่ไม่มีอยู่ ในการแก้ไขข้อผิดพลาดของคีย์ คุณสามารถตรวจสอบคีย์ล่วงหน้าก่อนใช้งานและใช้ได้เฉพาะเมื่อมีคีย์เท่านั้น คุณสามารถใช้การลอง…ยกเว้นการบล็อกเพื่อจัดการกับข้อผิดพลาดของคีย์
สำหรับคำแนะนำเกี่ยวกับวิธีการเรียนรู้ภาษาการเขียนโปรแกรม Python โปรดดูคู่มือ How to Learn Python ที่ครอบคลุมของเรา คุณจะพบลิงก์ไปยังแหล่งข้อมูลการเรียนรู้ หนังสือ และหลักสูตรชั้นนำในคู่มือนี้