গুণাবলী হল একটি বস্তু, একটি ডেটা টাইপ বা একটি শ্রেণীর সাথে যুক্ত মান বা ফাংশন। আপনি যদি এমন একটি মানকে কল করেন যার ডেটা টাইপ বা শ্রেণী সেই বৈশিষ্ট্যটিকে সমর্থন করে না, তাহলে আপনি একটি অ্যাট্রিবিউট ত্রুটির সম্মুখীন হবেন৷
এই গাইডটি আলোচনা করে যে একটি অ্যাট্রিবিউট ত্রুটি কী এবং এর অর্থ কী। আমরা একটি অ্যাট্রিবিউট ত্রুটির একটি উদাহরণ দিয়ে হেঁটে যাব যাতে আপনি শিখতে পারেন কিভাবে আপনার কোডে একটি ঠিক করতে হয়৷
পাইথন অ্যাট্রিবিউট ত্রুটি কী?
একটি Python AttributeError উত্থাপিত হয় যখন আপনি একটি বস্তুর একটি বৈশিষ্ট্য কল করার চেষ্টা করেন যার টাইপ সেই পদ্ধতিটিকে সমর্থন করে না। উদাহরণস্বরূপ, পাইথন অ্যাপেন্ড() ব্যবহার করার চেষ্টা করা হচ্ছে একটি স্ট্রিং এর পদ্ধতি একটি অ্যাট্রিবিউট ত্রুটি প্রদান করে কারণ স্ট্রিংগুলি অ্যাপেন্ড() সমর্থন করে না .
একটি পাইথন ক্লাসে, আপনি পদ্ধতি এবং মানগুলি সংজ্ঞায়িত করতে পারেন যা সেই শ্রেণীর বস্তু দ্বারা ভাগ করা হয়। এই কারণেই কিছু লোক ক্লাসকে অবজেক্টের ব্লুপ্রিন্ট হিসাবে মনে করে।
একটি পদ্ধতি বা একটি ক্লাস কল করা হল অন্য একটি উপায় যে আপনি সেই শ্রেণীর একটি বৈশিষ্ট্য উল্লেখ করছেন। একটি বৈশিষ্ট্য সম্পর্কে চিন্তা করার একটি উপায় হল একজন ব্যক্তির শারীরিক বৈশিষ্ট্যের মতো। কিছু মানুষের চোখ নীল। কিছু লোকের চুল গোলাপী রঙের। এই সব গুণাবলী.
একটি পাইথন ক্লাসে, একটি বৈশিষ্ট্য হতে পারে "eye_color"। এই বৈশিষ্ট্যটি একজন ব্যক্তির চোখের রঙ নির্ধারণ করতে পারে। একটি বৈশিষ্ট্য এছাড়াও একটি ফাংশন হতে পারে. changeEyeColor() নামে একটি ফাংশন "eye_color" এর মান পরিবর্তন করতে পারে।
ডেটা প্রকারের বৈশিষ্ট্য রয়েছে। উদাহরণস্বরূপ, আপনি একটি স্ট্রিংকে একটি তালিকায় রূপান্তর করতে Python join() পদ্ধতি ব্যবহার করতে পারেন। স্ট্রিং অবজেক্ট join() সমর্থন করে পদ্ধতি।
আপনি যদি কোনো ফাংশন বা কোনো মান উল্লেখ করার চেষ্টা করেন যা কোনো ক্লাস অবজেক্ট বা কোনো ডেটা টাইপের সঙ্গে যুক্ত নয়, আপনি একটি অ্যাট্রিবিউট ত্রুটির সম্মুখীন হবেন।
81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷
৷গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।
অ্যাট্রিবিউট ত্রুটি পাইথন উদাহরণ
আসুন একটি প্রোগ্রাম লিখি যা জুতার দুটি তালিকা একত্রিত করে। দুটি জুতার দোকান একীভূত হওয়ার মধ্য দিয়ে যাচ্ছে এবং তারা যে সমস্ত অনন্য জুতা বিক্রি করে তার একটি তালিকা তৈরি করতে চায়৷
শুরু করার জন্য, আসুন একটি পাইথন সেট সংজ্ঞায়িত করি যার মধ্যে একটি দোকানের জুতা রয়েছে, হ্যারিসন জুতা:
harrisons_shoes = {"Nike Air Force 1 07", "Nike Air Max Plus", "Adidas Gazelle"}
আমরা আমাদের সেট সংজ্ঞায়িত করার জন্য কোঁকড়া ধনুর্বন্ধনী ব্যবহার করি। এর পরে, হ্যারিসনের সাথে একত্রিত হওয়া দোকানের দেওয়া জুতাগুলির নামের সাথে একটি সেট সংজ্ঞায়িত করা যাক। এই জুতার দোকানটিকে বলা হয় শু এম্পোরিয়াম:
shoe_emporium = {"Adidas Samba", "Adidas Superstar", "Nike Air Max Plus"}
যেহেতু এই দুটি সংগ্রহ সেট করা হয়েছে, তারা শুধুমাত্র অনন্য মান সঞ্চয় করতে পারে। এর মানে যখন আমরা সেগুলিকে একত্রে যোগ করি, তখন আমরা কোনো সদৃশ মান ছাড়াই একটি সেট পাব৷
৷আমাদের সেটগুলিকে একত্রে যুক্ত করতে, আমরা বিল্ট-ইন ফাংশনটি ব্যবহার করতে যাচ্ছি যার নাম extend():
harrisons_shoes.extend(shoe_emporium) print(harrisons_shoes)
এক্সটেন্ড() পদ্ধতিটি "soe_emporium" সেট থেকে "harrisons_shoes" সেটে সমস্ত জুতা যোগ করে। আমরা পাইথন print() ব্যবহার করি বিবৃতি এটি আমাদের নতুন সেটের সমস্ত জুতা দেখতে দেয়। আসুন আমাদের কোড চালাই এবং দেখুন কি হয়:
Traceback (most recent call last): File "main.py", line 3, in <module> harrisons_shoes.extend(shoe_emporium) AttributeError: 'set' object has no attribute 'extend'
আমাদের কোড একটি অ্যাট্রিবিউট ত্রুটি প্রদান করে।
AttributeError Python Solution
আমাদের ত্রুটি বার্তা আমাদের বলে যে আমরা extend() পদ্ধতিটি ব্যবহার করতে পারি না একটি বস্তুর উপর যার ডেটা টাইপ একটি সেট। কারণ এক্সটেন্ড() একটি তালিকা পদ্ধতি। এটি সেট দ্বারা সমর্থিত নয়৷
৷যদি আমরা আমাদের দুটি সেটকে একত্রিত করতে চাই, আমাদের একটি সংযোজন চিহ্ন ব্যবহার করতে হবে:
harrisons_shoes.update(shoe_emporium) print(harrisons_shoes)
এটি "হ্যারিসন_জুতা" সেটে "শু_এম্পোরিয়াম" সেটের বিষয়বস্তু যোগ করবে। তারপর আমরা কনসোলে সেট করা “harrisons_shoes”-এর সমস্ত মান প্রিন্ট করি। চলুন আমাদের নতুন প্রোগ্রাম চালাই:
{'Nike Air Force 1 07', 'Adidas Superstar', 'Adidas Samba', 'Nike Air Max Plus', 'Adidas Gazelle'}
আমাদের প্রোগ্রাম আমাদের দুটি আসল সেট থেকে সমস্ত জুতা সহ একটি সেট ফেরত দেয়। আমাদের মূল দুটি সেটে ছয়টি মান থাকলেও এখন মাত্র পাঁচটি। কারণ দুটি জুতা একই ছিল এবং সেট শুধুমাত্র অনন্য মান সঞ্চয় করতে পারে।
আমাদের প্রোগ্রাম আমাদের দুটি আসল সেট থেকে সমস্ত জুতা সহ একটি সেট ফেরত দেয়। আমাদের মূল দুটি সেটে ছয়টি মান থাকলেও এখন মাত্র পাঁচটি। কারণ দুটি জুতা একই ছিল এবং সেট শুধুমাত্র অনন্য মান সঞ্চয় করতে পারে।
অন্বেষণের জন্য অনুরূপ বৈশিষ্ট্য ত্রুটি
বৈশিষ্ট্য ত্রুটিগুলি অবিশ্বাস্যভাবে সাধারণ। আপনি যখন উল্লেখ করছেন এমন বৈশিষ্ট্যগুলিকে সমর্থন করে না এমন ডেটা টাইপ এবং ক্লাসের অ্যাট্রিবিউটগুলিকে কল করার চেষ্টা করলে সেগুলি দেখা দিতে পারে৷
আপনি যদি একটি বৈশিষ্ট্য উল্লেখ করার সময় একটি টাইপো করেন তাহলে এই ত্রুটিগুলিও হতে পারে৷ পাইথন আপনার কোডকে যেমন-ই ব্যাখ্যা করবে। আপনি যদি একটি টাইপো করেন, তাহলে এটি পাইথনের কাছে প্রদর্শিত হবে যে আপনি এমন একটি বৈশিষ্ট্য উল্লেখ করছেন যা বিদ্যমান নেই৷
উদাহরণস্বরূপ, Python split() ব্যবহার করে একটি তালিকা বিভক্ত করার পদ্ধতি সাধারণ। কিন্তু, বিভক্ত() একটি স্ট্রিং পদ্ধতি এবং তাই এটি একটি তালিকা বিভক্ত করতে ব্যবহার করা যাবে না৷
আরও পড়ার জন্য, নিম্নলিখিত ত্রুটিগুলি নিয়ে গবেষণা করার কথা বিবেচনা করুন:
- AttributeError:'তালিকা' অবজেক্টের কোনো অ্যাট্রিবিউট 'বিভক্ত' নেই
- AttributeError:'মডিউল' অবজেক্টের কোনো অ্যাট্রিবিউট নেই 'urlopen'
উপসংহার
পাইথনে বৈশিষ্ট্য ত্রুটি উত্থাপিত হয় যখন একটি অবৈধ বৈশিষ্ট্য উল্লেখ করা হয়। এই ত্রুটিগুলি সমাধান করার জন্য, প্রথমে আপনি যে অ্যাট্রিবিউটটিকে কল করছেন সেটি বিদ্যমান আছে কিনা তা পরীক্ষা করুন৷ তারপর, নিশ্চিত করুন যে বৈশিষ্ট্যটি আপনি যে অবজেক্ট বা ডেটা টাইপের সাথে কাজ করছেন তার সাথে সম্পর্কিত।
আপনি যে বৈশিষ্ট্যটি চান তা যদি একটি অন্তর্নির্মিত প্রকারের সাথে যুক্ত থাকে এবং বিদ্যমান না থাকে তবে আপনার একটি বিকল্প সন্ধান করা উচিত। একটি ডেটা টাইপের জন্য বিদ্যমান অনেকগুলি বৈশিষ্ট্যের বিকল্প রয়েছে যা আপনি অন্য ডেটা টাইপের জন্য ব্যবহার করতে পারেন। উদাহরণস্বরূপ, কোন এক্সটেন্ড() নেই সেট সহ পদ্ধতি কিন্তু আপনি ইউনিয়ন() ব্যবহার করতে পারেন সেটে যোগ দিতে।
পাইথন কোড লেখার বিষয়ে আরও জানতে, আমাদের পাইথন কীভাবে শিখবেন নির্দেশিকা পড়ুন।