अजगर में "परीक्षण" कैसे करें?


398

मेरे पास एक तरीका है जो कभी-कभी एक NoType मूल्य देता है। तो मैं एक चर का सवाल कैसे कर सकता हूं जो कि कोई नहीं है? उदाहरण के लिए, अगर विधि का उपयोग करने की आवश्यकता है

if not new:
    new = '#'

मुझे पता है कि यह गलत तरीका है और मुझे आशा है कि आप समझ गए होंगे कि मेरा क्या मतलब था।


मुझे लगता है कि इसका उत्तर यहां और जाहिरा तौर पर कहीं से पहले दिया गया था
योरोडम

यदि Noneएकमात्र तरीका है जो आपकी विधि रिटर्न के लिए bool(returnValue)समान है False, तो if not new:ठीक काम करना चाहिए। यह कभी-कभी अंतर्निहित देयताओं में होता है - उदाहरण के लिए, re.matchया तो कोई नहीं देता है या एक सत्य मिलान वस्तु है।
केविन

इसके अलावा के बारे में मेरा उत्तर देखना nullऔर Noneअजगर में यहाँ
माइकल एकोका

जवाबों:


631

तो मैं एक चर का सवाल कैसे कर सकता हूं जो कि कोई नहीं है?

isऑपरेटर का उपयोग करें , इस तरह

if variable is None:

यह क्यों काम करता है?

चूंकि पायथन में Noneएकमात्र एकल ऑब्जेक्ट है NoneType, हम यह isजांचने के लिए ऑपरेटर का उपयोग कर सकते हैं कि इसमें कोई चर है Noneया नहीं।

isडॉक्स से उद्धरण ,

ऑब्जेक्ट पहचान के लिए ऑपरेटर isऔर is notपरीक्षण: x is yसच है अगर और केवल अगर xऔर yएक ही वस्तु हैं। x is not yउलटा सत्य मूल्य देता है।

चूंकि उसमें केवल एक ही हो सकता है None, isजांच करने के लिए पसंदीदा तरीका होगा None


इसे घोड़े के मुँह से सुनो

पायथन के कोडिंग स्टाइल दिशानिर्देशों का हवाला देते हुए - PEP-008 (संयुक्त रूप से स्वयं Guido द्वारा परिभाषित),

एकमात्र करने के लिए तुलना पसंद Noneहमेशा से किया जाना चाहिए isयाis not , कभी नहीं समानता ऑपरेटरों


तो क्या अंतर है == Noneऔर is None?
नोएनमे

@ नाम के संबंध में None, वे दोनों समान परिणाम देंगे।
Thefourtheye

1
यह तुलना करने पर काम नहीं करता है कि क्या pandasDataFrame मौजूद है - इसके लिए, मैं type(df) is type(None)बचने के लिए उपयोग करता हूं :The truth value of a DataFrame is ambiguous
Marc Maxmeister


27

यह एलेक्स हॉल के जवाब केisinstance अनुसार भी किया जा सकता है :

>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True

isinstance भी सहज है, लेकिन यह जटिलता है कि इसे लाइन की आवश्यकता है

NoneType = type(None)

जो की तरह के लिए आवश्यक नहीं है intऔर float


चूंकि आप उपवर्ग नहीं कर सकते हैं NoneTypeऔर चूंकि Noneएक सिंगलटन है, isinstanceइसलिए इसका पता लगाने के लिए उपयोग नहीं किया जाना चाहिए None- इसके बजाय आपको स्वीकार किए गए उत्तर के रूप में करना चाहिए, और उपयोग करें is Noneया is not None
हारून हॉल

18

जैसा कि आरोन हॉल की टिप्पणी द्वारा बताया गया है:

चूंकि आप उपवर्ग नहीं कर सकते हैं NoneTypeऔर चूंकि Noneएक सिंगलटन है, isinstanceइसलिए इसका पता लगाने के लिए उपयोग नहीं किया जाना चाहिए None- इसके बजाय आपको स्वीकार किए गए उत्तर के रूप में करना चाहिए, और उपयोग करें is Noneया is not None


मूल उत्तर:

इलायची के उत्तर के अलावा अतिरिक्त रेखा के बिना सबसे सरल तरीका शायद है:
isinstance(x, type(None))

तो मैं एक चर का सवाल कैसे कर सकता हूं जो कि कोई नहीं है? मैं अगर विधि का उपयोग करने की आवश्यकता है

का उपयोग करना -statement के भीतर की isinstance()आवश्यकता नहीं है :isif

if isinstance(x, type(None)): 
    #do stuff

अतिरिक्त जानकारी
आप एक isinstance()कथन में कई प्रकारों की जांच कर सकते हैं जैसा कि दस्तावेज में उल्लेख किया गया है । बस एक टपल के रूप में लिखें।

isinstance(x, (type(None), bytes))

1
चूंकि आप उपवर्ग नहीं कर सकते हैं NoneTypeऔर चूंकि Noneएक सिंगलटन है, isinstanceइसलिए इसका पता लगाने के लिए उपयोग नहीं किया जाना चाहिए None- इसके बजाय आपको स्वीकार किए गए उत्तर के रूप में करना चाहिए, और उपयोग करें is Noneया is not None
हारून हॉल

1
यह उत्तर उपयोगी थाpython 3.6.7
संतोष धिपुले चंद्रकांत

@AaronHall का उपयोग क्यों isinstance नहीं किया जाना चाहिए ? मैं समझता हूं कि isइसे प्राथमिकता दी जानी चाहिए, लेकिन कुछ ऐसे मामले हैं जहां आइंस्टीन का रूप अधिक स्वाभाविक लगता है (जैसे एक ही बार में कई प्रकार की जाँच करना isinstance(x, (str, bool, int, type(None))))। क्या यह सिर्फ एक व्यक्तिगत प्राथमिकता है या क्या कोई ऐसी चेतावनी है जिससे मैं अनजान हूँ?
Conchylicultor

@Conchylicultor आपके सुझाव को डाउन करता है: 1. ग्लोबल लुक-अप के लिए type2. फिर उसे कॉल करना 3. फिर उस प्रकार को देखना None- जब Noneएक सिंगलटन और कीवर्ड दोनों हो। एक और नकारात्मक पहलू: 4. यह बहुत ही गैर-मानक है और जब लोग आपके कोड को देख रहे हैं तो भौंहें उठाएंगे। x is Noneअधिक अनुकूलित जांच है। मेरा सुझाव है x is None or isinstance(x, (str, bool, int))- लेकिन मैं यह भी आप आप क्या कर रहे हैं जब आप उस आम में एक बहुत कुछ नहीं है प्रकार के लिए प्रकार की जाँच के उस तरह कर रहे हैं ... के बारे में अधिक लगता है सुझाव है
हारून हॉल

4

यकीन नहीं होता अगर यह सवाल का जवाब देता है। लेकिन मुझे पता है कि मुझे यह पता लगाने में थोड़ा समय लगा। मैं एक वेबसाइट के माध्यम से पाशन कर रहा था और अचानक लेखकों के नाम वहाँ नहीं थे। इसलिए चेक स्टेटमेंट की जरूरत थी।

if type(author) == type(None):
     my if body
else:
    my else body

लेखक इस मामले में कोई भी परिवर्तनशील हो सकता है, और Noneकिसी भी प्रकार का हो सकता है जिसे आप जाँच रहे हैं।


चूंकि Noneएक सिंगलटन है, typeइसका पता लगाने के लिए उपयोग नहीं किया जाना चाहिए None- इसके बजाय आपको ऐसा करना चाहिए जैसा कि स्वीकृत उत्तर कहता है, और उपयोग करें is Noneया is not None
हारून हॉल

2

पायथन 2.7:

x = None
isinstance(x, type(None))

या

isinstance(None, type(None))

==> सच है


1
चूंकि आप उपवर्ग नहीं कर सकते हैं NoneTypeऔर चूंकि Noneएक सिंगलटन है, isinstanceइसलिए इसका पता लगाने के लिए उपयोग नहीं किया जाना चाहिए None- इसके बजाय आपको स्वीकार किए गए उत्तर के रूप में करना चाहिए, और उपयोग करें is Noneया is not None
हारून हॉल

ओह ठीक! धन्यवाद !
पेस्को

0

मुझे उम्मीद है कि यह उदाहरण आपके लिए उपयोगी होगा)

print(type(None) # NoneType

तो, आप चर नाम के प्रकार की जांच कर सकते हैं

#Example
name = 12 # name = None
if type(name) != type(None):
    print(name)
else:
    print("Can't find name")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.