यहाँ उपयोग के एक उदाहरण है:
try:
with open('filename') as f:
do_stuff_that_depends_on_the_existence_of_the_file(f)
except IOError as e:
print 'Trouble opening file'
तुम किसी भी उपयोग के साथ फ़ाइल खोलने रहे हैं, तो ओएस की गारंटी देगा कि फ़ाइल मौजूद है, वरना यह एक त्रुटि के साथ विफल हो जाएगा। यदि पहुंच अनन्य है, तो फ़ाइल के लिए विवाद में कोई अन्य प्रक्रिया या तो आपके द्वारा अवरुद्ध की जाएगी, या आपको अवरोधित करेगी।
try
फ़ाइल खोलने के कार्य की त्रुटि या सफलता का पता लगाने का एक तरीका है, क्योंकि पाइथन में फ़ाइल I/O एपीआई में आमतौर पर रिटर्न कोड नहीं होते हैं (इसके बजाय अपवाद का उपयोग किया जाता है)। तो वास्तव में अपने प्रश्न का उत्तर देने के लिए, यह try
नहीं है जो दौड़ की स्थिति से बचाता है, यह open
है। यह मूल रूप से सी में समान है (जिस पर पाइथन आधारित है), लेकिन अपवादों के बिना। अधिक जानकारी के लिए this पढ़ें।
ध्यान दें कि आप शायद कोड निष्पादित करना चाहते हैं जो कोशिश ब्लॉक के अंदर फ़ाइल तक पहुंच पर निर्भर करता है। एक बार जब आप फ़ाइल बंद कर देते हैं, तो इसका अस्तित्व अब गारंटी नहीं देता है।
कॉलिंग os.path.exists
कॉलिंग समय पर एक पल में स्नैपशॉट देता है जब फ़ाइल मौजूद हो सकती है या नहीं हो सकती है, और आपको os.path.exists
रिटर्न के बाद फ़ाइल के अस्तित्व का कोई ज्ञान नहीं है। Malevolent कोड या अप्रत्याशित तर्क फ़ाइल को हटा या बदल सकता है जब आप इसकी अपेक्षा नहीं कर रहे हैं। यह आपके सिर को मोड़ने के समान है कि यह जांचने से पहले एक सड़क स्पष्ट हो। एक बार जब आप अपना सिर वापस कर लेंगे, तो आपके पास यह अनुमान लगाने के अलावा कुछ भी नहीं है कि आप कहां जा रहे हैं। फ़ाइल खोलने पर एक विस्तारित संगत स्थिति की गारंटी होती है, ड्राइविंग करते समय कुछ भी संभव नहीं है (अच्छे या बीमार के लिए)। :)
try/open
का उपयोग करने के बजाए फ़ाइल मौजूद नहीं है, यह जांचने का आपका सुझाव अभी भी os.path.exists
की स्नैपशॉट प्रकृति के कारण अपर्याप्त है। दुर्भाग्यवश मुझे सभी मामलों में निर्देशिका में फ़ाइलों को बनाने से रोकने का कोई तरीका नहीं है, इसलिए मुझे लगता है कि इसकी अनुपस्थिति के बजाय फ़ाइल के सकारात्मक अस्तित्व की जांच करना सबसे अच्छा है।
स्रोत
2013-01-29 02:11:20
@downvoter - तर्क? क्या यहाँ कोई समस्या है? – Mike