मेरे पास एक फ़ंक्शन है जो तीन चीजों में से एक को वापस कर सकता है:
- सफलता (
True) - असफलता (
False) - त्रुटि पढ़ने / पार्सिंग स्ट्रीम (
None)
मेरा सवाल यह है कि अगर मुझे इसके खिलाफ परीक्षण नहीं करना है Trueया False, मुझे यह कैसे देखना चाहिए कि परिणाम क्या है। नीचे बताया गया है कि वर्तमान में मैं यह कैसे कर रहा हूं:
result = simulate(open("myfile"))
if result == None:
print "error parsing stream"
elif result == True: # shouldn't do this
print "result pass"
else:
print "result fail"
क्या यह वास्तव में == Trueभाग को हटाने के रूप में सरल है या मुझे एक त्रिकोणीय बूल डेटा-प्रकार जोड़ना चाहिए। मैं नहीं चाहता कि simulateफ़ंक्शन अपवाद को फेंक दे, क्योंकि मैं चाहता हूं कि बाहरी कार्यक्रम एक त्रुटि के साथ यह लॉग इन करें और जारी रखें।
simulateफ़ंक्शन के अंदर मैं सभी अपवादों को पकड़ता हूं; मुझे ऐसा कुछ भी नहीं चाहिए जो सिम्युलेटर के अंदर होता है ताकि बाकी प्रोग्राम को चालू रखा जा सके (और अगले तत्व को संसाधित किया जा सके)। लेकिन जवाब मुझे अपना मन बदल रहे हैं।
simulateपास चीजें हैं तो वह पकड़ सकता है और फिर से प्रयास कर सकता है, यह अच्छा है। लेकिन अगर यह "विफल" होता है, तो इसे वापस नहीं आना चाहिए None। इसे केवल उस स्क्रिप्ट के लिए एक अपवाद को उठाना चाहिए जिसने इसे बुलाया था। किसी भी तरह, simulateकिया जाता है। रिटर्निंग Noneएक उचित अपवाद को बढ़ाने के रूप में सहायक नहीं है - या अपवाद को simulateसंभालने के लिए कॉलिंग स्क्रिप्ट में प्रचारित करने की अनुमति देता है ।
except Exception:इसके बजाय का उपयोग करें । यह सभी "वास्तविक" त्रुटियों को पकड़ता है, साथ में Warningऔर StopIteration। यह अनुमति देता है KeyboardInterruptऔर SystemExitयद्यपि के माध्यम से। यदि आप वास्तव में उन लोगों को पकड़ना चाहते हैं, तो संभवतः किसी अन्य, बाहरी कोशिश / को छोड़कर या किसी अन्य संरचना का उपयोग करना सबसे अच्छा है जो स्पष्ट रूप से आपके इरादे को दस्तावेज करते हैं, क्योंकि वे "त्रुटियां" नहीं हैं। (लेकिन मैंने कहा "लगभग कभी नहीं" ... शायद आपके मामले में आप वास्तव में सब कुछ हड़पना चाहते हैं, और यहां तक कि Ctrl-C या sys.exit()बाहर निकलने से रोकते हैं , आदि)