मुझे एट्रीब्यूट क्यों मिलता है: 'कोई नहीं' ऑब्जेक्ट में कोई विशेषता 'कुछ' नहीं है?


292

मुझे एक त्रुटि मिलती है जो कहती है

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

मेरे पास कोड यहां पोस्ट करने के लिए बहुत लंबा है। सामान्य परिदृश्यों के कारण क्या होता है AttributeError, NoneTypeइसका क्या मतलब है और मैं कैसे संकीर्ण हो सकता हूं?


8
कोड का सबसे छोटा बिट खींचो जो समस्या को प्रदर्शित करता है। वह पोस्ट करें। printवास्तविक मानों को प्रकट करने के लिए फ़ंक्शंस (या स्टेटमेंट्स संस्करण पर निर्भर करता है) जोड़ें, जो वास्तव में इस समस्या वाले कोड में चर हैं।
S.Lott

1
'कोई नहीं' का अर्थ प्रकार = कोई नहीं। आप शायद एक अघोषित चर तक पहुँचने की कोशिश कर रहे हैं। आपको एक जिस्ट पोस्ट करना चाहिए ताकि हम आपकी मदद कर सकें।
लो। ग।

2
@ Lo @cGRENON: "अघोषित चर"? अजगर में? यह बहुत मतलब नहीं है। कोई एक चर घोषित कैसे करेगा?
एस.लॉट

2
@ Lo @cGRENON - पायथन में नहीं है। आपको "असाइनमेंट से पहले संदर्भित" अपवाद मिलता है। चर डिफ़ॉल्ट रूप से नहीं होते हैं None
gddc

1
@ Lo @cGRENON: क्या आपके पास कोई कोड है जो इस विचार को प्रदर्शित करता है जिसके बारे में आप बात कर रहे हैं?
एस.लॉट

जवाबों:


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।
केन 14

17

NoneTypeमूल्य के प्रकार है None। इस स्थिति में, चर lifetimeका मान होता है None

ऐसा होने का एक सामान्य तरीका एक फ़ंक्शन को कॉल करना है जो कि लापता है return

हालांकि, किसी को भी एक चर सेट करने के लिए अन्य तरीकों की एक अनंत संख्या है।


1
मुझे नहीं लगता कि (पूर्व-संपादन) lifetimeका मूल्य था None। वह किसी और चीज़ के जीवनकाल की विशेषता तक पहुँचने की कोशिश कर रहा था None
gddc

13

नीचे दिए गए कोड पर विचार करें।

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

y = return_something(2)
y.real()

यह आपको त्रुटि देने वाला है

गुण: 'कोई नहीं' ऑब्जेक्ट में कोई विशेषता 'वास्तविक' नहीं है

तो अंक नीचे दिए गए हैं।

  1. कोड में, एक फ़ंक्शन या क्लास विधि कुछ भी नहीं लौटा रही है या कोई भी वापस नहीं कर रहा है
  2. फिर आप त्रुटि संदेश के कारण उस लौटी हुई वस्तु (जो कोई नहीं है) की विशेषता तक पहुँचने का प्रयास करते हैं।

4

इसका मतलब है कि जिस वस्तु को आप एक्सेस करना चाह रहे हैं None। अजगर में Noneएक Nullचर है। इस प्रकार की त्रुटि आपके कोड के लिए de de de है कुछ इस तरह से है।

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 सही है, लेकिन एक बहुत लगातार उदाहरण जोड़ना:

आप इस फ़ंक्शन को पुनरावर्ती रूप में कॉल कर सकते हैं। उस स्थिति में, आप null पॉइंटर पर समाप्त हो सकते हैं या NoneType। उस स्थिति में, आप यह त्रुटि प्राप्त कर सकते हैं। तो उस पैरामीटर की एक विशेषता तक पहुँचने से पहले जाँच करें कि यह नहीं है NoneType


हाँ, ठीक है, लेकिन आप उस जाँच को कैसे करते हैं?
not2qubit

if foo == कोई नहीं:
barribow

if foo is not None:
ग्रिंगो ने 21

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

आप इस त्रुटि को अपने साथ एक फ्लास्क एप्लिकेशन में HTML टिप्पणी कर सकते हैं। यहाँ qual.date_expiry का मान कोई नहीं है:

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

लाइन हटाएं या इसे ठीक करें:

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

-1

अगर हम नीचे की तरह कुछ असाइन करते हैं, तो यह त्रुटि को "गुण के रूप में फेंक देगा: 'कोई नहीं' ऑब्जेक्ट में कोई विशेषता नहीं है" "

df1=df.withColumn('newAge',df['Age']).show() 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.