len()
পদ্ধতি শুধুমাত্র পুনরাবৃত্তিযোগ্য বস্তু যেমন স্ট্রিং, তালিকা, এবং অভিধানে কাজ করে। এর কারণ হল পুনরাবৃত্তিযোগ্য বস্তুগুলিতে মানগুলির ক্রম থাকে। আপনি যদি len()
ব্যবহার করার চেষ্টা করেন কোনোটিই মান নেই, আপনি ত্রুটির সম্মুখীন হবেন "TypeError:অবজেক্টের 'NoneType'-এর কোনো len()
নেই ”
এই নির্দেশিকায়, আমরা এই ত্রুটির অর্থ কী এবং এটি কীভাবে কাজ করে সে সম্পর্কে কথা বলি। আমরা এই ত্রুটির দুটি উদাহরণের মধ্য দিয়ে চলেছি যাতে আপনি আপনার কোডে কীভাবে এটি সমাধান করবেন তা বের করতে পারেন৷
৷TypeError:'NoneType' টাইপের অবজেক্টের কোনো len() নেই
NoneType None ডেটা টাইপকে বোঝায়। আপনি এমন পদ্ধতি ব্যবহার করতে পারবেন না যা পুনরাবৃত্তিযোগ্য বস্তুতে কাজ করবে, যেমন len()
, একটি নেই মান. এর কারণ কোনোটিতেই মানের সংগ্রহ নেই। None-এর দৈর্ঘ্য গণনা করা যাবে না কারণ None-এর কোনো চাইল্ড ভ্যালু নেই।
এই ত্রুটি দুটি ক্ষেত্রে সাধারণ:
- যেখানে আপনি ভুলে যান যে অন্তর্নির্মিত ফাংশনগুলি স্থানের মধ্যে একটি তালিকা পরিবর্তন করে
- যেখানে আপনি একটি ফাংশনে রিটার্ন স্টেটমেন্ট ভুলে যান
আসুন এই প্রতিটি কারণকে গভীরভাবে দেখে নেওয়া যাক।
কারণ # 1:অন্তর্নির্মিত ফাংশন তালিকার জায়গায় পরিবর্তন করে
আমরা একটি প্রোগ্রাম তৈরি করতে যাচ্ছি যা একটি স্কুলে শিক্ষার্থীদের সম্পর্কে তথ্য সম্বলিত অভিধানের একটি তালিকা সাজায়। আমরা এই তালিকাটিকে তাদের শেষ পরীক্ষায় একজন শিক্ষার্থীর গ্রেডের ক্রমবর্ধমান ক্রম অনুসারে সাজাব।
শুরু করতে, অভিধানের একটি তালিকা সংজ্ঞায়িত করুন যাতে শিক্ষার্থীদের এবং তাদের সাম্প্রতিক পরীক্ষার স্কোর সম্পর্কে তথ্য রয়েছে:
ছাত্ররা =[ {"নাম":"পিটার", "স্কোর":76 }, {"নাম":"রিচার্ড", "স্কোর":63 },{"নাম":"ইরিন", "স্কোর" :64 },{"name":"Miley", "score":89 }]
প্রতিটি অভিধানে দুটি কী এবং মান রয়েছে। একটি ছাত্রের নামের সাথে মিলে যায় এবং অন্যটি তাদের শেষ পরীক্ষায় অর্জিত স্কোরের সাথে মিলে যায়। এরপরে, sort()
ব্যবহার করুন আমাদের শিক্ষার্থীদের তালিকা সাজানোর পদ্ধতি:
81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷
৷গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় কাটিয়েছে।
def score_sort(s):রিটার্ন s["score"]sorted_students =students.sort(key=score_sort)
আমরা "score_sort" নামে একটি ফাংশন ঘোষণা করেছি যা প্রতিটি অভিধানে "স্কোর" এর মান প্রদান করে। তারপর আমরা sort()
ব্যবহার করে আমাদের অভিধানের তালিকার আইটেমগুলি অর্ডার করতে এটি ব্যবহার করি পদ্ধতি
এরপরে, আমরা আমাদের তালিকার দৈর্ঘ্য প্রিন্ট আউট করি:
প্রিন্ট("তালিকায় {}টি ছাত্র আছে।".format(len(sorted_students)))
আমরা লুপ:
ব্যবহার করে কনসোলে অভিধানের নতুন তালিকা প্রিন্ট আউট করিs sorted_students এর জন্য:print("{} তাদের শেষ পরীক্ষায় {} স্কোর অর্জন করেছে।".format(s["name"], s["score"]))
এই কোডটি একটি বার্তা প্রিন্ট করে যা আমাদেরকে জানায় যে একজন শিক্ষার্থী তাদের শেষ পরীক্ষায় "ছাট করা_ছাত্র" তালিকার প্রতিটি শিক্ষার্থীর জন্য কত নম্বর অর্জন করেছে। আমাদের কোড রান করা যাক:
ট্রেসব্যাক (সর্বশেষ সাম্প্রতিক কল):ফাইল "main.py", লাইন 13,নেইপ্রিন্টে("তালিকায় {}টি ছাত্র আছে।".format(len(sorted_students)))TypeError:object টাইপের 'NoneType'-এর কোনো len()
আমাদের কোড একটি ত্রুটি ফেরত.
এই সমস্যাটি সমাধান করার জন্য, আমাদের কোডটি সরাতে হবে যেখানে আমরা sort()
এর ফলাফল বরাদ্দ করি। পদ্ধতি "ছাট করা_ছাত্রদের"। এর কারণ হল sort()
পদ্ধতি জায়গায় একটি তালিকা পরিবর্তন করে। এটি একটি নতুন তালিকা তৈরি করে না।
"sorted_students" তালিকার ঘোষণাটি সরান এবং আমাদের বাকি প্রোগ্রামে "ছাত্র" ব্যবহার করুন:
students.sort(key=score_sort)print("তালিকায় {}টি ছাত্র আছে।".format(len(students)))এর জন্য ছাত্রদের জন্য:print("{} এ {} স্কোর অর্জন করেছে তাদের শেষ পরীক্ষা।".ফরম্যাট(গুলি["নাম"], এস["স্কোর"]))আমাদের কোড চালান এবং দেখুন কি হয়:
তালিকায় 4 জন ছাত্র রয়েছে। রিচার্ড তাদের শেষ পরীক্ষায় 63 স্কোর অর্জন করেছে। এরিন তাদের শেষ পরীক্ষায় 64 স্কোর অর্জন করেছে। পিটার তাদের শেষ পরীক্ষায় 76 স্কোর অর্জন করেছে। মাইলি 89 স্কোর অর্জন করেছে তাদের শেষ পরীক্ষায়।আমাদের কোড সফলভাবে সঞ্চালিত হয়. প্রথমত, আমাদের কোড আমাদের বলে যে আমাদের তালিকায় কতজন শিক্ষার্থী রয়েছে। আমাদের কোড তারপর প্রতিটি শিক্ষার্থীর তথ্য এবং তারা তাদের শেষ পরীক্ষায় কত নম্বর অর্জন করেছে তার তথ্য প্রিন্ট করে। এই তথ্যটি একজন শিক্ষার্থীর গ্রেডের ঊর্ধ্বক্রম অনুসারে প্রিন্ট করা হয়।
কারণ #2:একটি ফেরত বিবৃতি ভুলে যাওয়া
আমরা আমাদের কোড আরও মডুলার করতে যাচ্ছি। এটি করার জন্য, আমরা আমাদের বাছাই পদ্ধতিকে তার নিজস্ব ফাংশনে নিয়ে যাই। আমরা একটি ফাংশনও সংজ্ঞায়িত করব যা প্রতিটি শিক্ষার্থী তাদের পরীক্ষায় কী স্কোর অর্জন করেছে সে সম্পর্কে তথ্য প্রিন্ট করে।
আমাদের শিক্ষার্থীদের তালিকা এবং আমাদের সাজানোর সহায়ক ফাংশন সংজ্ঞায়িত করে শুরু করুন। আমরা টিউটোরিয়ালের আগের থেকে এই কোডটি ধার করব।
ছাত্ররা =[ {"নাম":"পিটার", "স্কোর":76 }, {"নাম":"রিচার্ড", "স্কোর":63 },{"নাম":"ইরিন", "স্কোর" :64 },{"name":"Miley", "score":89 }]def score_sort(s):রিটার্ন s["score"]এরপরে, একটি ফাংশন লিখুন যা আমাদের তালিকাকে সাজায়:
def sort_list(ছাত্র):students.sort(key=score_sort)অবশেষে, আমরা একটি ফাংশন সংজ্ঞায়িত করি যা প্রতিটি ছাত্রের কর্মক্ষমতা সম্পর্কে তথ্য প্রদর্শন করে:
def show_students(new_students):print("তালিকাতে {}টি ছাত্র আছে।".format(len(students))) for s in new_students:print("{} তাদের শেষবার {} স্কোর অর্জন করেছে পরীক্ষাআমরা আমাদের কোড চালানোর আগে, আমাদের ফাংশনগুলিকে কল করতে হবে:
new_students =sort_list(students)show_students(new_students)আমাদের প্রোগ্রাম প্রথমে
sort_list()
ব্যবহার করে আমাদের তালিকা সাজাতে হবে ফাংশন তারপর, আমাদের প্রোগ্রাম কনসোলে প্রতিটি ছাত্র সম্পর্কে তথ্য মুদ্রণ করবে। এটিshow_students()
-এ পরিচালনা করা হয় ফাংশন।আসুন আমাদের কোড রান করি:
ট্রেসব্যাক (সর্বশেষ সাম্প্রতিক কল):ফাইল "main.py", লাইন 21,show_students(new_students) ফাইল "main.py", লাইন 15, show_students প্রিন্টে("এতে {}টি ছাত্র আছে তালিকা। আমাদের কোড একটি ত্রুটি ফেরত. এই ত্রুটিটি ঘটেছে কারণ আমরা আমাদের "sort_list" ফাংশনে একটি "রিটার্ন" বিবৃতি অন্তর্ভুক্ত করতে ভুলে গেছি।
যখন আমরা আমাদের
sort_list()
কল করি ফাংশন, আমরা পরিবর্তনশীল "new_students" এর প্রতিক্রিয়া বরাদ্দ করি। সেই ভেরিয়েবলটি আমাদেরshow_students()
-এ পাঠানো হয়েছে ফাংশন যা প্রতিটি ছাত্র সম্পর্কে তথ্য প্রদর্শন করে। এই ত্রুটিটি সমাধান করতে, আমাদের অবশ্যইsort_list()
-এ একটি ফেরত বিবৃতি যোগ করতে হবে ফাংশন:
def sort_list(students):students.sort(key=score_sort) ছাত্র ফেরতআমাদের কোড চালান:
তালিকায় 4 জন ছাত্র রয়েছে। রিচার্ড তাদের শেষ পরীক্ষায় 63 স্কোর অর্জন করেছে। এরিন তাদের শেষ পরীক্ষায় 64 স্কোর অর্জন করেছে। পিটার তাদের শেষ পরীক্ষায় 76 স্কোর অর্জন করেছে। মাইলি 89 স্কোর অর্জন করেছে তাদের শেষ পরীক্ষায়।আমাদের কোড আমাদের প্রত্যাশিত প্রতিক্রিয়া প্রদান করে৷
উপসংহার
"TypeError:'NoneType' টাইপের অবজেক্টের কোন
len()
নেই আপনি যখনlen()
ব্যবহার করার চেষ্টা করেন তখন ত্রুটি ঘটে একটি বস্তুর উপর পদ্ধতি যার মান নেই।
এই ত্রুটিটি সমাধান করতে, নিশ্চিত করুন যে আপনি কোনও অন্তর্নির্মিত তালিকা পদ্ধতির প্রতিক্রিয়াগুলি বরাদ্দ করছেন না, যেমন
sort()
, একটি পরিবর্তনশীল. যদি এটি ত্রুটির সমাধান না করে, তবে নিশ্চিত করুন যে আপনার প্রোগ্রামে সফলভাবে কাজ করার জন্য প্রয়োজনীয় সমস্ত "রিটার্ন" বিবৃতি রয়েছে।
এখন আপনি পাইথন পেশাদারের মতো এই সমস্যাটি সমাধান করতে প্রস্তুত!