TypeError: object of type 'NoneType' has no len()
len() मेथड केवल इटरेबल ऑब्जेक्ट्स जैसे स्ट्रिंग्स, लिस्ट्स, और डिक्शनरीज़ पर काम करता है। ऐसा इसलिए है क्योंकि इटरेबल ऑब्जेक्ट्स में मानों के सीक्वेंस होते हैं। यदि आप len() मेथड को None मान पर उपयोग करने का प्रयास करते हैं, तो आपको "TypeError: object of type 'NoneType' has no len()" एरर मिलेगी।
इस गाइड में, हम बात करते हैं कि इस एरर का क्या मतलब है और यह कैसे काम करती है। हम इस एरर के दो उदाहरणों के माध्यम से चलते हैं ताकि आप अपने कोड में इसे हल करने का तरीका समझ सकें।
कारण #1: बिल्ट-इन फंक्शन्स लिस्ट को इन-प्लेस बदलते हैं
हम एक प्रोग्राम बनाने जा रहे हैं जो स्टूडेंट्स की जानकारी वाले डिक्शनरीज़ की लिस्ट को सॉर्ट करता है। हम इस लिस्ट को स्टूडेंट के अंतिम टेस्ट में ग्रेड के आरोही क्रम में सॉर्ट करेंगे।
शुरू करने के लिए, स्टूडेंट्स और उनके हालिया टेस्ट स्कोर की जानकारी वाली डिक्शनरीज़ की एक लिस्ट परिभाषित करें:
students = [
{"name": "Peter", "score": 76},
{"name": "Richard", "score": 63},
{"name": "Erin", "score": 64},
{"name": "Miley", "score": 89}
]
प्रत्येक डिक्शनरी में दो कीज़ और मान होते हैं। एक स्टूडेंट के नाम से संबंधित होता है और दूसरा स्टूडेंट द्वारा अपने अंतिम टेस्ट में अर्जित स्कोर से संबंधित होता है। अगला, अपनी स्टूडेंट्स की लिस्ट को सॉर्ट करने के लिए sort() मेथड का उपयोग करें:
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 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, inprint("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, inshow_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()
हमारा कोड एरर रिटर्न करता है। यह एरर इसलिए हुई क्योंकि हम अपने "sort_list" फंक्शन में "return" स्टेटमेंट शामिल करना भूल गए।
जब हम अपने sort_list() फंक्शन को कॉल करते हैं, तो हम इसकी प्रतिक्रिया को "new_students" वेरिएबल में असाइन करते हैं। वह वेरिएबल हमारे show_students() फंक्शन में पास किया जाता है जो प्रत्येक स्टूडेंट के बारे में जानकारी प्रदर्शित करता है। इस एरर को हल करने के लिए, हमें 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: object of type 'NoneType' has no len()" एरर तब होती है जब आप किसी ऑब्जेक्ट पर len() मेथड का उपयोग करने का प्रयास करते हैं जिसका मान None होता है।
इस एरर को हल करने के लिए, सुनिश्चित करें कि आप किसी भी बिल्ट-इन लिस्ट मेथड्स की प्रतिक्रियाओं को, जैसे sort(), किसी वेरिएबल में असाइन नहीं कर रहे हैं। यदि यह एरर हल नहीं करता है, तो सुनिश्चित करें कि आपके प्रोग्राम में वे सभी "return" स्टेटमेंट्स हैं जिन्हें इसे सफलतापूर्वक कार्य करने के लिए आवश्यक है।
अब आप इस समस्या को एक पायथन प्रोफेशनल की तरह हल करने के लिए तैयार हैं!