अपवादों में उपयोगी विवरण नहीं होते हैं क्योंकि अपवादों की अवधारणा अभी तक सॉफ़्टवेयर इंजीनियरिंग अनुशासन के भीतर पर्याप्त रूप से परिपक्व नहीं हुई है, इसलिए कई प्रोग्रामर उन्हें पूरी तरह से नहीं समझते हैं, और इसलिए वे उनके साथ ठीक से व्यवहार नहीं करते हैं।
हां, IndexOutOfRangeException
सटीक इंडेक्स होना चाहिए जो सीमा से बाहर था, साथ ही वह सीमा जो उस समय मान्य थी जो इसे फेंक दिया गया था, और यह .NET रनटाइम के रचनाकारों की ओर से अवमानना है जो यह नहीं करता है। हां, ओरेकल के table or view not found
अपवाद में उस तालिका का नाम या दृश्य होना चाहिए जो नहीं मिला था, और फिर, यह तथ्य कि यह इसके लिए जिम्मेदार नहीं है, की ओर से अवमानना है।
एक बड़े हिस्से के लिए, भ्रम गलत मूल विचार से उपजा है कि अपवादों में मानव-पठनीय संदेश शामिल होना चाहिए, जो बदले में यह समझने की कमी से उपजा है कि सभी अपवाद क्या हैं, इसलिए यह एक दुष्चक्र है।
चूंकि लोग सोचते हैं कि अपवाद में मानव-पठनीय संदेश होना चाहिए, उनका मानना है कि अपवाद द्वारा जो भी जानकारी ली जाती है, उसे भी मानव-पठनीय संदेश में स्वरूपित किया जाना चाहिए, और फिर वे सभी मानव-पठनीय संदेश लिखने के लिए ऊब गए हैं- बिल्डिंग कोड, या वे डरते हैं कि ऐसा करने से जो कुछ भी आंखें संदेश को देख सकती हैं, उन्हें जानकारी का एक अनजाना हिस्सा विभाजित किया जा सकता है। (अन्य उत्तरों द्वारा उल्लिखित सुरक्षा मुद्दे।)
लेकिन इस मामले की सच्चाई यह है कि उन्हें इस बारे में चिंता नहीं करनी चाहिए क्योंकि अपवाद में मानव-पठनीय संदेश नहीं होना चाहिए । अपवाद वे चीजें हैं जिन्हें केवल प्रोग्रामर को कभी भी देखना और / या निपटना चाहिए। यदि कभी किसी उपयोगकर्ता को विफलता की जानकारी प्रस्तुत करने की आवश्यकता होती है, तो उसे बहुत ही उच्च स्तर पर, परिष्कृत तरीके से और उपयोगकर्ता की भाषा में, जिसे, सांख्यिकीय रूप से बोलना पड़ता है, अंग्रेजी होने की संभावना नहीं है।
इसलिए, प्रोग्रामर के लिए, अपवाद का "संदेश" अपवाद का वर्ग नाम है , और जो भी अन्य जानकारी अपवाद के अनुसार है , उसे अपवाद वस्तु के अंतिम (आसानी से / आसानी से) सदस्य चर में कॉपी किया जाना चाहिए। अधिमानतः, हर एक बोधगम्य थोड़ा सा। इस तरह, किसी भी संदेश को उत्पन्न (या करना) चाहिए, और इसलिए कोई भी prying आँखें इसे नहीं देख सकती हैं।
नीचे एक टिप्पणी में थॉमस ओवेन्स द्वारा व्यक्त चिंता को संबोधित करने के लिए:
हाँ, निश्चित रूप से, कुछ स्तर पर, आप होगा अपवाद के बारे में एक लॉग संदेश पैदा करते हैं। लेकिन आप पहले से ही समस्या को देख रहे हैं कि आप क्या कह रहे हैं: एक तरफ, स्टैक ट्रेस के बिना एक अपवाद लॉग संदेश बेकार है, लेकिन दूसरी ओर, आप उपयोगकर्ता को पूरे अपवाद स्टैक ट्रेस को देखने नहीं देना चाहते हैं। फिर, हमारी समस्या यह है कि हमारा दृष्टिकोण पारंपरिक प्रथाओं द्वारा तिरछा है। लॉग फाइलें परंपरागत रूप से सादे पाठ में होती हैं, जो ठीक हो सकती हैं जबकि हमारा अनुशासन अपनी प्रारंभिक अवस्था में था, लेकिन शायद अब और नहीं: यदि कोई सुरक्षा चिंता है, तो लॉग फ़ाइल को द्विआधारी और / या एन्क्रिप्ट किया जाना चाहिए।
चाहे द्विआधारी या सादा पाठ, लॉग फ़ाइल को एक धारा के रूप में सोचा जाना चाहिए जिसमें अनुप्रयोग डीबग जानकारी को क्रमबद्ध करता है। इस तरह की एक धारा केवल प्रोग्रामर की आंखों के लिए होगी, और एक अपवाद के लिए डिबगिंग जानकारी उत्पन्न करने का कार्य डिबग लॉग स्ट्रीम में अपवाद को क्रमबद्ध करने के रूप में सरल होना चाहिए। इस तरह, लॉग को देखकर आपको अपवाद वर्ग नाम देखने को मिलता है, (जो, जैसा कि मैंने पहले ही बताया है, सभी व्यावहारिक उद्देश्यों के लिए "संदेश" है), अपवाद सदस्य चर में से प्रत्येक जो सब कुछ का वर्णन करता है जो कि प्रासंगिक है- और व्यावहारिक-टू-इन-इन-इन-लॉग और संपूर्ण स्टैक ट्रेस शामिल हैं। ध्यान दें कि इस प्रक्रिया से मानव-पठनीय अपवाद संदेश का प्रारूपण स्पष्ट रूप से कैसे गायब है।
पुनश्च
इस विषय पर मेरे कुछ और विचार इस उत्तर में मिल सकते हैं: एक अच्छा अपवाद संदेश कैसे लिखें
पी पी एस
ऐसा प्रतीत होता है कि बाइनरी लॉग फ़ाइलों के बारे में मेरे सुझाव से बहुत से लोगों को गुदगुदी हो रही थी, इसलिए मैंने एक बार फिर से उत्तर में संशोधन किया ताकि यह स्पष्ट हो सके कि जो मैं यहाँ सुझा रहा हूँ वह यह नहीं है कि लॉग फ़ाइल बाइनरी होनी चाहिए, बल्कि लॉग फ़ाइल बाइनरी हो सकती है, यदि आवश्यकता हो।