আমি কেন অ্যাট্রিবিউটআরার করব: 'ননটাইপ' অবজেক্টের কোনও 'গুণ' নেই?


291

আমি বলছি যে একটি ত্রুটি পেতে রাখা

AttributeError: 'NoneType' object has no attribute 'something'

আমার কাছে কোডটি এখানে পোস্ট করার জন্য অনেক দীর্ঘ। কোন সাধারণ পরিস্থিতি এর কারণ হতে পারে AttributeError, যার NoneTypeঅর্থ অনুমিত হয় এবং কী হচ্ছে আমি কীভাবে সংকুচিত করতে পারি?


8
কোডটি ক্ষুদ্রতম বিটটি বের করুন যা সমস্যাটি দেখায়। যে পোস্ট। যোগ printফাংশন (অথবা বিবৃতি সংস্করণের উপর নির্ভর করে) প্রকৃত মান প্রকাশ করতে যে ভেরিয়েবল আসলে কোডটি এই সমস্যা হচ্ছে এর আছে।
এস .লট

1
'ননটাইপ' মানে টাইপ = কোনওটি নয়। আপনি সম্ভবত একটি অঘোষিত ভেরিয়েবল অ্যাক্সেস করার চেষ্টা করছেন। আপনার একটি বক্তব্য পোস্ট করা উচিত যাতে আমরা আপনাকে সহায়তা করতে পারি।
Loïc জি।

2
@ লোকগ্রেনন: "অঘোষিত ভেরিয়েবল"? পাইথনে? এটি খুব একটা বোঝায় না। কিভাবে একটি পরিবর্তনশীল ঘোষণা করবে?
এস .লট

2
@ লোকগ্রেনন - পাইথনে নয় এটি নয়। আপনি একটি "নিয়োগের আগে রেফারেন্সড" ব্যতিক্রম পান। ভেরিয়েবলগুলি ডিফল্ট হয় না None
gddc

1
@ লোকগ্রেনন: আপনার কাছে এমন কিছু কোড রয়েছে যা এই ধারণাটি প্রদর্শন করে যা আপনি বলছেন?
এস .লট

উত্তর:


287

ননটাইপের অর্থ হ'ল আপনি যে ক্লাস বা অবজেক্টের সাথে কাজ করছেন বলে মনে করেন তার পরিবর্তে আপনি আসলে পেয়েছেন None। এর অর্থ হ'ল উপরে যে কোনও অ্যাসাইনমেন্ট বা ফাংশন কল ব্যর্থ হয়েছে বা একটি অপ্রত্যাশিত ফলাফল দিয়েছে।


111

আপনার একটি পরিবর্তনশীল যা কোনওটির সমান নয় এবং আপনি এর কোনও বৈশিষ্ট্যটি 'কিছু' বলে অ্যাক্সেস করার চেষ্টা করছেন।

foo = None
foo.something = 1

অথবা

foo = None
print foo.something

উভয় একটি উত্পাদন করবে AttributeError: 'NoneType'


9
লোকেরা কীভাবে কোনও কিছুর বাইরে বেরিয়ে আসতে পারে তা আপনি নির্দেশ না করা পর্যন্ত এটি সম্ভবত অসহায় None। স্পষ্টতই foo = Noneসমস্যা হওয়ার সম্ভাবনা কম; এটি হতে চলেছে foo = something()এবং আপনি বুঝতে পারবেন না যে কখন এটি সফল হয় না বা ফলাফল সেটটি খালি বা যে কোনও কিছুতে something()ফিরে Noneআসে।
ট্রিপল

54

অন্যেরা কী ব্যাখ্যা করেছেন NoneType এটি শেষ করার সাধারণ উপায় কী এবং এটি (অর্থাত্ কোনও ফাংশন থেকে কোনও মান ফেরত দিতে ব্যর্থতা)।

আপনার কাছে অন্য একটি সাধারণ কারণ Noneযেখানে এটি আপনি প্রত্যাশা করেন না তা হ'ল একটি পরিবর্তনীয় অবজেক্টের উপর স্থান-ক্রিয়াকলাপ। উদাহরণ স্বরূপ:

mylist = mylist.sort()

sort()তালিকার পদ্ধতি, ইন-জায়গা তালিকা করা হয় যে, বাছাই করে mylistরুপান্তরিত করা হয়েছে। তবে পদ্ধতির আসল রিটার্ন মান হল Noneএবং তালিকাটি বাছাই করা নয়। সুতরাং আপনি ঠিক নিযুক্ত করা Noneহয়েছে mylist। আপনি যদি পরবর্তীটি করার চেষ্টা করেন, বলুন, mylist.append(1)পাইথন আপনাকে এই ত্রুটি দেবে।


এটি দুর্দান্ত ব্যাখ্যা - সি # তে নাল রেফারেন্স ব্যতিক্রম পাওয়ার মতো। ভেরিয়েবলের কোনও নির্ধারিত মান নেই এবং এটি কোনও নয় .. Thx।
কেন

17

NoneTypeমান প্রকার None। এই ক্ষেত্রে, ভেরিয়েবলের lifetimeএকটি মান থাকে None

এটি হওয়ার একটি সাধারণ উপায় হ'ল একটি ফাংশন অনুপস্থিতকে কল করা return

যাইহোক, কোনও হিসাবে একটি ভেরিয়েবল সেট করার অন্যান্য উপায়গুলির অসীম সংখ্যা রয়েছে।


1
আমার মনে হয় না (প্রাক-সম্পাদনা) lifetimeএর কোনও মূল্য ছিল None। তিনি যা কিছু ছিল তার আজীবন বৈশিষ্ট্যটি অ্যাক্সেস করার চেষ্টা করছিলেন None
জিডিডিসি

13

নীচের কোড বিবেচনা করুন।

def return_something(someint):
 if  someint > 5:
    return someint

y = return_something(2)
y.real()

এটি আপনাকে ত্রুটি দিতে চলেছে

অ্যাট্রিবিউটআরার: 'ননটাইপ' অবজেক্টটির কোনও 'রিয়েল' অ্যাট্রিবিউট নেই

পয়েন্ট নীচে হিসাবে হয়।

  1. কোডটিতে, একটি ফাংশন বা শ্রেণি পদ্ধতি কোনও কিছুই ফিরিয়ে দিচ্ছে না বা কিছুই ফিরিয়ে দিচ্ছে না
  2. তারপরে আপনি ত্রুটি বার্তা তৈরি করে, ফিরে আসা অবজেক্টের (যা কোনও নয়) এর একটি বৈশিষ্ট্য অ্যাক্সেস করার চেষ্টা করবেন to

4

এর অর্থ আপনি যে বস্তুটি অ্যাক্সেস করার চেষ্টা করছেন তা None। অজগর Noneএকটি Nullপরিবর্তনশীল। এই ধরণের ত্রুটিটি আপনার কোডের কাছে ঘটে যা এমন কিছু।

x1 = None
print(x1.something)

#or

x1 = None
x1.someother = "Hellow world"

#or
x1 = None
x1.some_func()

# you can avoid some of these error by adding this kind of check
if(x1 is not None):
    ... Do something here
else:
    print("X1 variable is Null or None")

1

gddc ঠিক আছে, তবে খুব ঘন ঘন উদাহরণ যুক্ত:

আপনি এই ফাংশনটিকে পুনরাবৃত্ত আকারে কল করতে পারেন। সেক্ষেত্রে, আপনি নাল পয়েন্টার বা শেষ হতে পারে NoneType। সেক্ষেত্রে আপনি এই ত্রুটিটি পেতে পারেন। সুতরাং যে প্যারামিটারের একটি অ্যাট্রিবিউট অ্যাক্সেস করার আগে এটি কিনা তা পরীক্ষা করে দেখুন NoneType


হ্যাঁ, ঠিক আছে, তবে আপনি কীভাবে এই চেকটি করবেন?
not2qubit

যদি foo ==
কোনওটি


1

একটি অনুমানকারী (স্ক্লারইন) তৈরি করার সময়, আপনি যদি ফিটের ফাংশনে নিজেকে ফিরিয়ে দিতে ভুলে যান তবে আপনি একই ত্রুটি পাবেন।

class ImputeLags(BaseEstimator, TransformerMixin):
    def __init__(self, columns):
        self.columns = columns

    def fit(self, x, y=None):
        """ do something """

    def transfrom(self, x):
        return x

অ্যাট্রিবিউটআরার: 'ননটাইপ' অবজেক্টটির কোনও 'ট্রান্সফর্ম' বৈশিষ্ট্য নেই?

return selfফিট ফাংশনে যুক্ত করা ত্রুটিটি ঠিক করে।


0

আপনি ফ্লাস্ক অ্যাপ্লিকেশনটিতে এইচটিএমএল মন্তব্য করার মাধ্যমে এই ত্রুটিটি পেতে পারেন। এখানে কোয়ালিটি.ডেট_ এক্সপায়ারের মান কোনওটি নয়:

   <!-- <td>{{ qual.date_expiry.date() }}</td> -->

লাইনটি মুছুন বা এটি ঠিক করুন:

<td>{% if qual.date_attained != None %} {{ qual.date_attained.date() }} {% endif %} </td>

-1

যদি আমরা নীচের মতো কিছু বরাদ্দ করি তবে এটি "AttributeError: 'NoType' অবজেক্টের কোনও বৈশিষ্ট্য 'শো' নেই বলে ত্রুটি ছুঁড়ে দেবে

df1=df.withColumn('newAge',df['Age']).show() 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.