len()
เมธอดใช้ได้เฉพาะกับอ็อบเจ็กต์ที่ทำซ้ำได้ เช่น สตริง รายการ และพจนานุกรม นี่เป็นเพราะวัตถุที่ทำซ้ำได้มีลำดับของค่า หากคุณลองใช้ len()
วิธีค่า None คุณจะพบข้อผิดพลาด “TypeError:วัตถุประเภท 'NoneType' ไม่มี len()
”
ในคู่มือนี้ เราจะพูดถึงความหมายของข้อผิดพลาดนี้และวิธีการทำงาน เราอธิบายสองตัวอย่างของข้อผิดพลาดนี้ในการใช้งานจริง เพื่อให้คุณทราบวิธีแก้ปัญหาในโค้ดของคุณ
TypeError:วัตถุประเภท 'NoneType' ไม่มี len()
NoneType หมายถึงชนิดข้อมูลไม่มี คุณไม่สามารถใช้วิธีการที่จะทำงานกับวัตถุที่ทำซ้ำได้ เช่น len()
บนค่าไม่มี เนื่องจากไม่มีไม่มีคอลเลกชันของค่า ไม่สามารถคำนวณความยาวของไม่มีได้เนื่องจากไม่มีไม่มีค่าลูก
ข้อผิดพลาดนี้พบได้บ่อยในสองกรณี:
- ในกรณีที่คุณลืมไปว่าฟังก์ชันในตัวจะเปลี่ยนรายการแบบแทนที่
- ในกรณีที่คุณลืมคำสั่ง return ในฟังก์ชัน
มาดูสาเหตุแต่ละอย่างในเชิงลึกกัน
สาเหตุ #1:ฟังก์ชันในตัวเปลี่ยนรายการในตำแหน่ง
เรากำลังจะสร้างโปรแกรมที่จัดเรียงรายการพจนานุกรมที่มีข้อมูลเกี่ยวกับนักเรียนที่โรงเรียน เราจะจัดเรียงรายการนี้โดยเรียงจากน้อยไปมากของเกรดของนักเรียนในการทดสอบครั้งล่าสุด
ในการเริ่มต้น ให้กำหนดรายการพจนานุกรมที่มีข้อมูลเกี่ยวกับนักเรียนและคะแนนสอบล่าสุด:
students = [ {"name": "Peter", "score": 76 }, {"name": "Richard", "score": 63 }, {"name": "Erin", "score": 64 }, {"name": "Miley", "score": 89 } ]
พจนานุกรมแต่ละชุดประกอบด้วยคีย์และค่าสองคีย์ หนึ่งสอดคล้องกับชื่อของนักเรียนและอีกคนหนึ่งสอดคล้องกับคะแนนที่นักเรียนได้รับในการทดสอบครั้งล่าสุดของพวกเขา ต่อไป ใช้ sort()
วิธีการจัดเรียงรายชื่อนักเรียนของเรา:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
def score_sort(s): return s["score"] sorted_students = students.sort(key=score_sort)
เราได้ประกาศฟังก์ชันที่เรียกว่า “score_sort” ซึ่งจะคืนค่าของ “score” ในแต่ละพจนานุกรม จากนั้นเราใช้คำสั่งนี้เพื่อเรียงลำดับรายการในพจนานุกรมของเราโดยใช้ sort()
กระบวนการ.
ต่อไป เราพิมพ์ความยาวของรายการของเรา:
print("There are {} students in the list.".format(len(sorted_students)))
เราพิมพ์รายการพจนานุกรมใหม่ไปยังคอนโซลโดยใช้ for loop:
for s in sorted_students: print("{} earned a score of {} on their last test.".format(s["name"], s["score"]))
รหัสนี้พิมพ์ข้อความแจ้งจำนวนคะแนนที่นักเรียนได้รับจากการทดสอบครั้งสุดท้ายสำหรับนักเรียนแต่ละคนในรายการ "sorted_students" เรียกใช้รหัสของเรา:
Traceback (most recent call last): File "main.py", line 13, in <module> print("There are {} students in the list.".format(len(sorted_students))) TypeError: object of type 'NoneType' has no len()
รหัสของเราส่งคืนข้อผิดพลาด
ในการแก้ปัญหานี้ เราจำเป็นต้องลบโค้ดที่เรากำหนดผลลัพธ์ของ sort()
วิธีการ "sorted_students" ทั้งนี้เป็นเพราะ sort()
วิธีการเปลี่ยนรายการในสถานที่ มันไม่ได้สร้างรายการใหม่
ลบการประกาศรายชื่อ "sorted_students" และใช้ "students" ในส่วนที่เหลือของโปรแกรม:
students.sort(key=score_sort) print("There are {} students in the list.".format(len(students))) for s in students: print("{} earned a score of {} on their last test.".format(s["name"], s["score"]))
เรียกใช้โค้ดของเราและดูว่าเกิดอะไรขึ้น:
There are 4 students in the list. Richard earned a score of 63 on their last test. Erin earned a score of 64 on their last test. Peter earned a score of 76 on their last test. Miley earned a score of 89 on their last test.
รหัสของเราดำเนินการได้สำเร็จ อันดับแรก รหัสของเราบอกเราว่ามีนักเรียนกี่คนในรายการของเรา รหัสของเราจะพิมพ์ข้อมูลเกี่ยวกับนักเรียนแต่ละคนและจำนวนคะแนนที่พวกเขาได้รับจากการทดสอบครั้งล่าสุด ข้อมูลนี้จัดพิมพ์โดยเรียงจากน้อยไปมากของเกรดของนักเรียน
สาเหตุ #2:ลืมคำชี้แจงการส่งคืน
เรากำลังจะทำให้โค้ดของเราเป็นแบบโมดูลาร์มากขึ้น ในการทำเช่นนี้ เราจะย้ายวิธีการจัดเรียงของเราไปเป็นฟังก์ชันของตัวเอง นอกจากนี้เรายังจะกำหนดฟังก์ชันที่พิมพ์ข้อมูลเกี่ยวกับคะแนนที่นักเรียนแต่ละคนได้รับจากการทดสอบ
เริ่มต้นด้วยการกำหนดรายชื่อนักเรียนและฟังก์ชันตัวช่วยการคัดแยกของเรา เราจะขอยืมโค้ดนี้จากตอนต้นในบทช่วยสอน
students = [ {"name": "Peter", "score": 76 }, {"name": "Richard", "score": 63 }, {"name": "Erin", "score": 64 }, {"name": "Miley", "score": 89 } ] def score_sort(s): return s["score"]
ต่อไป ให้เขียนฟังก์ชันที่เรียงลำดับรายการของเรา:
def sort_list(students): students.sort(key=score_sort)
สุดท้าย เรากำหนดฟังก์ชันที่แสดงข้อมูลเกี่ยวกับประสิทธิภาพของนักเรียนแต่ละคน:
def show_students(new_students): print("There are {} students in the list.".format(len(students))) for s in new_students: print("{} earned a score of {} on their last test.".format(s["name"], s["score"]))
ก่อนที่เราจะรันโค้ดของเรา เราต้องเรียกใช้ฟังก์ชันของเรา:
new_students = sort_list(students) show_students(new_students)
โปรแกรมของเราจะเรียงลำดับรายการของเราก่อนโดยใช้ sort_list()
การทำงาน. จากนั้นโปรแกรมของเราจะพิมพ์ข้อมูลเกี่ยวกับนักเรียนแต่ละคนไปที่คอนโซล สิ่งนี้ได้รับการจัดการใน show_students()
ฟังก์ชัน
เรียกใช้รหัสของเรา:
Traceback (most recent call last): File "main.py", line 21, in <module> show_students(new_students) File "main.py", line 15, in show_students print("There are {} students in the list.".format(len(new_students))) TypeError: object of type 'NoneType' has no len()
รหัสของเราส่งคืนข้อผิดพลาด ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากเราลืมใส่คำสั่ง "return" ในฟังก์ชัน "sort_list"
เมื่อเราเรียก sort_list()
ฟังก์ชัน เรากำหนดการตอบสนองให้กับตัวแปร "new_students" ตัวแปรนั้นถูกส่งไปยัง show_students()
. ของเรา ฟังก์ชั่นที่แสดงข้อมูลเกี่ยวกับนักเรียนแต่ละคน เพื่อแก้ไขข้อผิดพลาดนี้ เราต้องเพิ่มคำสั่ง return ใน sort_list()
การทำงาน:
def sort_list(students): students.sort(key=score_sort) return students
เรียกใช้รหัสของเรา:
There are 4 students in the list. Richard earned a score of 63 on their last test. Erin earned a score of 64 on their last test. Peter earned a score of 76 on their last test. Miley earned a score of 89 on their last test.
รหัสของเราส่งคืนการตอบกลับที่เราคาดไว้
บทสรุป
“TypeError:วัตถุประเภท 'NoneType' ไม่มี len()
” เกิดข้อผิดพลาดเมื่อคุณพยายามใช้ len()
วิธีการบนวัตถุที่มีค่าเป็นไม่มี
ในการแก้ไขข้อผิดพลาดนี้ ตรวจสอบให้แน่ใจว่าคุณไม่ได้กำหนดคำตอบของวิธีการสร้างรายการในตัว เช่น sort()
, เป็นตัวแปร หากวิธีนี้ไม่สามารถแก้ไขข้อผิดพลาดได้ ตรวจสอบให้แน่ใจว่าโปรแกรมของคุณมีคำสั่ง "ส่งคืน" ทั้งหมดที่จำเป็นสำหรับการทำงานได้สำเร็จ
ตอนนี้คุณพร้อมที่จะแก้ปัญหานี้อย่างมืออาชีพของ Python แล้ว!