2012-02-22 8 views
30

यह बहुत बुनियादी है लेकिन मैं कोडिंग कर रहा था और सोच रहा था कि क्या कोई पाइथनिक तरीका है कि यह जांचने के लिए कि क्या कुछ मौजूद नहीं है। यहाँ कैसे मैं यह कर यदि है अपने असली:पाइथोनिक तरीका यह जांचने के लिए कि कुछ मौजूद है या नहीं?

var = 1 
if var: 
    print 'it exists' 

लेकिन जब मैं जाँच अगर कुछ मौजूद नहीं है, मैं अक्सर कुछ इस तरह करते हैं:

var = 2 
if var: 
    print 'it exists' 
else: 
    print 'nope it does not' 

बर्बादी की तरह लगता है, तो सब मैं के बारे में परवाह है क्या यह जांचने का कोई तरीका है कि क्या कुछ और नहीं है?

+0

हमेशा टर्नरी होता है: http://stackoverflow.com/questions/394809/python-ternary-operator :) ... सोचा कि यह लिखने का सबसे पागल तरीका नहीं हो सकता है। – summea

+3

यदि 'var' वास्तव में ** मौजूद नहीं है **, तो आप इसका उपयोग करने का प्रयास करते समय अपवाद प्राप्त करने जा रहे हैं। यह 'if'/'else' संभाल सकता है के बाहर है। 'अगर var' ** मानता है कि' var' मौजूद है, और ** परीक्षण ** यदि यह "सत्य-आश" है (बूलियन में परिवर्तित होने पर गलत होने के बजाय सत्य बन जाता है)। –

+1

आप एक चर के अस्तित्व की जांच नहीं कर रहे हैं, लेकिन यह जांच कर रहे हैं कि इसका मूल्य 'सही' है, एक बूलियन संदर्भ है। – FallenAngel

उत्तर

83

LBYL शैली, "इससे पहले कि आप छलांग देखो":

var_exists = 'var' in locals() or 'var' in globals() 

EAFP शैली, "आसान अनुमति से माफी पूछने के लिए": जब में कोडिंग

try: 
    var 
except NameError: 
    var_exists = False 
else: 
    var_exists = True 

दूसरी शैली (EAFP) को प्राथमिकता दें पायथन, क्योंकि यह आमतौर पर अधिक विश्वसनीय है।

+0

परीक्षण अगर var मौजूद नहीं है: 'var' स्थानीय() में नहीं है और 'var' globals में नहीं है() – MyopicVisage

16

मुझे लगता है कि आप अपने शब्दावली के साथ सावधान रहना होगा कुछ मौजूद है और कुछ का मूल्यांकन करता है गलत दो अलग बातें हैं या नहीं। मान लिया जाये कि आप बाद चाहते हैं, तो आप बस कर सकते हैं:

if not var: 
    print 'var is False' 

पूर्व के लिए, यह कम सुरुचिपूर्ण होगा:

try: 
    var 
except NameError: 
    print 'var not defined' 

मैं एक छलांग और उद्यम लेने के लिए, तथापि, कि जा रहा हूँ जो कुछ भी यह जांचना चाहता है कि एक चर परिभाषित किया गया है या नहीं, शायद अधिक सुरुचिपूर्ण तरीके से हल किया जा सकता है।

+0

क्षमा करें झूठा मतलब नहीं था। मतलब है कि यह अस्तित्व में नहीं है। मैं एसक्यूएल प्रश्नों में इसे अधिक बार उपयोग करता हूं (मैं एक चुनिंदा क्वेरी में एक कथन कथन लपेटता हूं और यदि कोई परिणाम वापस नहीं आता है तो मैं कुछ काम करता हूं), इसलिए मौजूदा नहीं होने के लिए झूठी लग रही नहीं है। – Lostsoul

+0

अच्छी तरह से 'config = config()' और फिर 'अगर कॉन्फ़िगर नहीं है:' मुझे "स्थानीय चर कॉन्फ़िगरेशन कॉन्फ़िगरेशन से पहले संदर्भित करता है" :) – holms

0

अस्वीकृति के बारे में क्या?

if not var: 
    print 'nope it does not' 

हालांकि यह देखना है कि var गलत है/कोई नहीं है और var को परिभाषित नहीं किया गया है तो उड़ जाएगा।

देखने के लिए कि वर परिभाषित किया गया है:

try: 
    var 
except NameError: 
    print 'not defined' 
0
if not var: 
    #Var is None/False/0/ 

if var: 
    #Var is other then 'None/False/0' 
अजगर में

अगर varibale कोई नहीं/गलत/0 तो If var हालत असफल हो जायेगी ...

और अन्य के लिए से किसी भी मूल्य हो रही है ऑब्जेक्ट्स यह __nonzero__ पायथनिक विधि को कॉल करेगा जो इसकी कार्यक्षमता के आधार पर True या False लौटा सकता है। यदि यह एक है

var = 2 

try: 
    varz 
except NameError: 
    print("No varz") 

जांचने के लिए कि यह कोई नहीं/गलत

if varz is None 

... या

if not varz 
+2

यह उस मामले को संभाल नहीं करेगा जहां चर परिभाषित नहीं किया गया था, जो ओपी का सवाल है। – btown

2

यह जांचने के लिए एक वर परिभाषित किया गया है शब्दकोश, आप

हो सकते हैं 210

हालांकि, has_key() पूरी तरह से अजगर 3.x से निकाल दिया जाता है, इसलिए, अजगर रास्ते in

'ggg' in mydict  # this is it! 
# True if it exists 
# False if it doesn't 

उपयोग करने के लिए आप टपल, सूची के लिए in का उपयोग कर सकते है, और साथ ही निर्धारित किया है।


बेशक, अगर चर परिभाषित नहीं किया गया है, तो आप चुपचाप एक अपवाद को बढ़ाने के लिए (बस किसी भी अपवाद बढ़ा ... यह पारित), अगर अपवाद नहीं है क्या आप देखना चाहते हैं होगा (जो कई अनुप्रयोगों के लिए उपयोगी है, तो आप सिर्फ अपवाद लॉग इन करने की जरूरत है।)


यह हमेशा से पहले आप इसका इस्तेमाल एक चर को परिभाषित करने के लिए सुरक्षित है (आप जो "var का अर्थ है" स्थानीय संदर्भ से पहले काम "में चलेंगे "सादे अंग्रेजी में" दायरे में नहीं है। यदि आप क्वेरी के साथ कुछ करते हैं, तो मौका है, आप एक शब्दकोश चाहते हैं, और जांच कर रहे हैं कि कोई कुंजी मौजूद है या नहीं, in का उपयोग करें।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^