त्रुटि की व्याख्या: 'कोई नहीं टाइप' वस्तु चलने योग्य नहीं है
Python2 में, कोई नहीं टाइप कोई भी नहीं है। उदाहरण के लिए Python3 में कोई नहीं है
>>> print(type(None)) #Python2
<type 'NoneType'> #In Python2 the type of None is the 'NoneType' type.
>>> print(type(None)) #Python3
<class 'NoneType'> #In Python3, the type of None is the 'NoneType' class.
उस चर पर इरेटिंग करना जिसका कोई मूल्य नहीं है, विफल रहता है:
for a in None:
print("k") #TypeError: 'NoneType' object is not iterable
यदि वे कोई मान नहीं लौटाते हैं, तो पायथन तरीके कोई नहीं लौटते हैं:
def foo():
print("k")
a, b = foo() #TypeError: 'NoneType' object is not iterable
आपको इस तरह से किसी भी प्रकार के लिए अपने लूपिंग निर्माणों की जांच करने की आवश्यकता है:
a = None
print(a is None) #prints True
print(a is not None) #prints False
print(a == None) #prints True
print(a != None) #prints False
print(isinstance(a, object)) #prints True
print(isinstance(a, str)) #prints False
गुइडो कहते हैं कि केवल is
जांच के लिए उपयोग करें None
क्योंकि is
पहचान की जांच करने के लिए अधिक मजबूत है। समानता संचालन का उपयोग न करें क्योंकि वे अपने स्वयं के कार्यान्वयन के बबल-अप कार्यान्वयन कर सकते हैं। पायथन के कोडिंग स्टाइल दिशानिर्देश - PEP-008
कोई नहीं टपके चुपके हैं, और भेड़ के बच्चे से चुपके कर सकते हैं:
import sys
b = lambda x : sys.stdout.write("k")
for a in b(10):
pass #TypeError: 'NoneType' object is not iterable
कोई भी प्रकार मान्य कीवर्ड नहीं है:
a = NoneType #NameError: name 'NoneType' is not defined
None
और एक स्ट्रिंग का संघनन :
bar = "something"
foo = None
print foo + bar #TypeError: cannot concatenate 'str' and 'NoneType' objects
यहाँ क्या चल रहा है?
पायथन के दुभाषिया ने आपके कोड को pyc bytecode में बदल दिया। पायथन वर्चुअल मशीन ने बाइटकोड को संसाधित किया, इसमें एक लूपिंग निर्माण का सामना करना पड़ा, जिसने कहा कि कोई भी नहीं वाले चर पर पुनरावृति। __iter__
कोई नहीं पर विधि को लागू करके ऑपरेशन किया गया था ।
किसी के पास कोई __iter__
विधि निर्धारित नहीं है , इसलिए पायथन की वर्चुअल मशीन आपको बताती है कि वह क्या देखता है: कि कोई भी टाइप __iter__
विधि नहीं है।
यही कारण है कि पायथन की बतख-टाइपिंग विचारधारा को बुरा माना जाता है। प्रोग्रामर एक चर के साथ पूरी तरह से उचित कुछ करता है और रनटाइम पर यह किसी के द्वारा दूषित नहीं होता है, अजगर आभासी मशीन सैनिक पर प्रयास करता है, और कालीन पर असंबंधित बकवास का एक गुच्छा ऊपर उठाता है।
जावा या C ++ में ये समस्याएँ नहीं हैं क्योंकि इस तरह के कार्यक्रम को संकलित करने की अनुमति नहीं होगी क्योंकि आपने परिभाषित नहीं किया है कि जब कोई नहीं होता है तो क्या करना चाहिए। पायथन प्रोग्रामर को बहुत सी रस्सी देता है जिससे आप खुद को लटका सकते हैं और बहुत सी चीजें कर सकते हैं जिनसे असाधारण परिस्थितियों में काम करने की उम्मीद नहीं की जा सकती। पायथन एक यस-मैन है, यस-सर कह रहा है जब यह आपको खुद को नुकसान पहुंचाने से रोकता है, जैसे कि जावा और सी ++ करता है।
None
इसे अनुक्रम के रूप में लिया जाता है, तो यह पूरी तरह से हानिरहित एक खाली अनुक्रम उत्पन्न करना चाहिए।