प्रमुख अस्वीकरण: मैं विचार नहीं करते यह करने के लिए एक "सही" जवाब नहीं है। यहां व्यक्त विचार व्यक्तिपरक और व्यक्तिगत हैं। और भी यह है कि जिन विचारों को मैं espouse के बारे में सोच रहा हूं वे केवल उपयोगी हैं यदि आप अलग-अलग चीजों को अलग-अलग, अहम, दोषों के साथ करने जा रहे हैं ... क्योंकि आप डैनियल ईरविकियर के सूचनात्मक उत्तर के अनुसार सिस्टम का उपयोग कर सकते हैं। इसके साथ दिमाग में:
मेरा तर्क है कि "एक असाधारण असाधारण है"। एक त्रुटि कम अप्रत्याशित है।
अस्वीकरण: निम्नलिखित छद्म कोड अच्छा नहीं है; यह केवल मेरे मामले को स्पष्ट करने के बारे में सोचने वाले न्यूनतम मामले के रूप में कार्य करता है।
नोट: इस विचार प्रयोग में, GetFile निर्दिष्ट फ़ाइल नहीं मिल पाती है अगर इसे निर्दिष्ट फ़ाइल नहीं मिलती है।
function AlwaysGetFile(name){
var file = null;
if(FileExists(name)){
file = GetFile(name);
if(typeof file === "undefined"){
throw new "couldn't retrieve file" EXCEPTION
}
}
else{
throw new "file does not exist" ERROR
}
return file;
}
मामले कि एक उपभोक्ता एक फ़ाइल नाम जो मौजूद नहीं है, कोई त्रुटि हो जाएगा के साथ GetFileOrThrow कॉल में
। मेरे दिमाग में भेद वास्तव में है कि उच्च स्तरीय कोड (या उपयोगकर्ता इनपुट) कुछ गलत कर रहा है ... इस फ़ंक्शन को उस उच्च-स्तरीय कोड के लिए एक त्रुटि को पार करना होगा जो इस परिणाम के बारे में क्या करना है, यह तय कर सकता है। इसे इस तरह विचार करें ... इस समारोह किसी भी लेने वाली कार्यों के लिए कह रही है की जाएगी:
Look, my friend, I know what's going on here: it is an ERROR to request BobAccounts.xml, so don't do it again! Oh, and if you think you now know what might have gone wrong (having abused me), go ahead and try to recover from it!
अब मामले पर विचार किसी कारण से इसे पुनः प्राप्त करने में विफल रहता है इस समारोह का नाम लेता है, की जाँच करता है कि फ़ाइल मौजूद है और फिर उस। यह एक अलग स्थिति है। वास्तव में कुछ अप्रत्याशित हुआ है। और क्या है, उपभोग करने वाला कोड को दोष नहीं देना है। अब हम वास्तव में इस समारोह किसी भी लेने वाली कार्यों के लिए कहना चाहता हूँ:
Oh fiddlesticks! Sorry about this, I humbly beg your pardon but something EXCEPTIONAL that I don't really understand has gone wrong. I don't think that your request for BobAccounts.xml was unreasonable... and I know I should be fulfilling it for you. Since I'm lower level code than you, I really ought to know what's going on... but I don't... and since you've less chance than me of understanding this EXCEPTIONAL situation, I think you'd probably best just stop what you're doing and let this message go all the way to the top... I mean, there is something seriously fishy going on here.
तो मुझे लगता है कि मेरे सारांश यह है: यदि गलती उच्च आदेश कोड में हुआ (आप बुरा डेटा पारित किए गए) एक त्रुटि फेंक देते हैं। अगर गलती कम ऑर्डर कोड में होती है (एक फ़ंक्शन जिसे आप निर्भर करते हैं, जिस तरह से आप समझ में नहीं आते थे और योजना नहीं बना सकते थे) एक बहिष्कार फेंक देते हैं ... और अगर गलती उस समारोह में हुई जो आप वर्तमान में लिख रहे हैं .. ठीक है, दुह, अगर आप इसके बारे में जानते हैं तो इसे ठीक करें!
और, आखिरकार, मूल प्रश्न का अधिक जवाब देने के लिए: त्रुटियों और बहिष्कारों को संभालने के मामले में, मेरी सलाह होगी: सभी त्रुटियों को गहन रूप से संभालें (वैकल्पिक रूप से उन्हें लॉगिंग करें) ... लेकिन सावधानी से सावधानी बरतें; केवल एक अपवाद से पुनर्प्राप्त करने का प्रयास करें यदि आप वास्तव में सुनिश्चित हैं कि आप जानते हैं कि यह क्या है और यह क्यों हुआ है, अन्यथा इसे बबल करें (यदि आपको करना है तो इसे फिर से बनाना)।
मैंने इसे हमेशा "अपवाद हैंडलिंग" के रूप में संदर्भित किया है, हालांकि एक नई ब्लॉक ("...") 'को पकड़ने के लिए एक कैच ब्लॉक को ट्रिगर करने के लिए, तो ... – Josh
ठीक है आप जो कुछ भी चाहते हैं उसे फेंक सकते हैं -' फेंकें "हाय माँ!"; 'पूरी तरह से मान्य है। – Pointy
हां। शायद मुझे कहना चाहिए कि * मैं * नई त्रुटि ऑब्जेक्ट्स, या ऑब्जेक्ट्स जो त्रुटि से प्राप्त होता है फेंक देता हूं। – Josh