python - मैं कैसे जांचूं कि एक चर मौजूद है या नहीं?




exception variables (7)

इस तरह की स्थिति को संभालने के लिए अक्सर काम करने के लिए एक तरीका यह स्पष्ट रूप से जांचना नहीं है कि चर मौजूद है या नहीं, बल्कि आगे बढ़ें और संभावित रूप से गैर-मौजूदा चर के पहले उपयोग को आज़माएं / नाम को छोड़कर लपेटें:

# Search for entry.
for x in y:
  if x == 3:
    found = x

# Work with found entry.
try:
  print('Found: {0}'.format(found))
except NameError:
  print('Not found')
else:
  # Handle rest of Found case here
  ...

मैं जांचना चाहता हूं कि कोई चर मौजूद है या नहीं। अब मैं ऐसा कुछ कर रहा हूं:

try:
   myVar
except NameError:
   # Do something.

अपवादों के बिना अन्य तरीके हैं?


उन चरों का उपयोग जिन्हें परिभाषित या सेट नहीं किया गया है (अंतर्निहित या स्पष्ट रूप से) किसी भी भाषा में लगभग हमेशा एक बुरी चीज है क्योंकि यह इंगित करता है कि कार्यक्रम का तर्क ठीक से नहीं सोचा गया है, और इसके परिणामस्वरूप अप्रत्याशित व्यवहार।

निम्नलिखित चाल, जो आपके समान है, यह सुनिश्चित करेगी कि एक चर के उपयोग से पहले कुछ मूल्य है:

try:
    myVar
except NameError:
    myVar = None
# Now you're free to use myVar without Python complaining.

हालांकि, मुझे अभी भी नहीं लगता कि यह एक अच्छा विचार है - मेरी राय में, आपको अपना कोड दोबारा करना चाहिए ताकि यह स्थिति न हो।


कोशिश / छोड़कर एक चर के अस्तित्व के परीक्षण के लिए सबसे अच्छा तरीका है। लेकिन वैश्विक चर सेट करने / परीक्षण करने से आप जो भी कर रहे हैं, वह करने का लगभग एक बेहतर तरीका है।

उदाहरण के लिए, यदि आप मॉड्यूल-स्तरीय वैरिएबल को पहली बार प्रारंभ करना चाहते हैं, तो पहली बार जब आप कुछ फ़ंक्शन कॉल करते हैं, तो आप इस तरह कुछ कोड से बेहतर होते हैं:

my_variable = None

def InitMyVariable():
  global my_variable
  if my_variable is None:
    my_variable = ...

पाइथन except catch जाता है। इसके अलावा यह इतना आसान मामलों के लिए ठीक है। AttributeError है जिसका उपयोग यह जांचने के लिए किया जा सकता है कि किसी ऑब्जेक्ट में कोई विशेषता है या नहीं।


मैं मानता हूं कि परीक्षण 9 07070 के उत्तर के समान, एक फ़ंक्शन में उपयोग किया जा रहा है। मुझे वह जवाब पसंद नहीं है क्योंकि यह वैश्विक नामस्थान को प्रदूषित करता है। इसे ठीक करने का एक तरीका इसके बजाय कक्षा का उपयोग करना है:

class InitMyVariable(object):
  my_variable = None

def __call__(self):
  if self.my_variable is None:
   self.my_variable = ...

मुझे यह पसंद नहीं है, क्योंकि यह कोड को जटिल बनाता है और जैसे प्रश्नों को खोलता है, क्या यह सिंगलटन प्रोग्रामिंग पैटर्न की पुष्टि कर सकता है? सौभाग्य से, पायथन ने कार्यों को थोड़ी देर के लिए गुणों की अनुमति दी है, जो हमें यह सरल समाधान देता है:

def InitMyVariable():
  if InitMyVariable.my_variable is None:
    InitMyVariable.my_variable = ...
InitMyVariable.my_variable = None

यह जांचने के लिए पिछले उत्तरों के लिए सिर्फ एक जोड़ा है कि JSON / Dict में कोई कुंजी मौजूद है या नहीं, पायथन में

'जेसन / डिक्ट ऑब्जेक्ट नेम'.has_key (' कुंजी नाम ')

यह सच या गलत वापस आ जाएगा


स्थानीय चर के अस्तित्व की जांच करने के लिए:

if 'myVar' in locals():
  # myVar exists.

वैश्विक चर के अस्तित्व की जांच करने के लिए:

if 'myVar' in globals():
  # myVar exists.

यह जांचने के लिए कि किसी ऑब्जेक्ट में कोई विशेषता है या नहीं:

if hasattr(obj, 'attr_name'):
  # obj.attr_name exists.




variables