मैं आमतौर पर अधिकांश कोड विश्लेषण चेतावनियों से सहमत हूं, और मैं उनका पालन करने की कोशिश करता हूं। हालाँकि, मैं इसके साथ कठिन समय बिता रहा हूँ:
CA1031: सामान्य अपवाद प्रकारों को न पकड़ें
मैं इस नियम के औचित्य को समझता हूं। लेकिन, व्यवहार में, अगर मैं अपवाद के अपवाद के बावजूद समान कार्रवाई करना चाहता हूं, तो मैं हर एक को विशेष रूप से क्यों संभालूंगा? इसके अलावा, अगर मैं विशिष्ट अपवादों को संभालता हूं, तो क्या होगा अगर कोड मैं भविष्य में एक नया अपवाद फेंकने के लिए परिवर्तनों को बुला रहा हूं? अब मुझे उस नए अपवाद को संभालने के लिए अपना कोड बदलना होगा। जबकि अगर मैंने बस Exception
अपना कोड पकड़ा है तो उसे बदलना नहीं है।
उदाहरण के लिए, अगर फू बार को बुलाता है, और फू को बार द्वारा फेंके गए अपवाद के प्रकार की परवाह किए बिना प्रसंस्करण को रोकने की आवश्यकता है, तो क्या मैं पकड़े जाने वाले अपवाद के प्रकार के बारे में विशिष्ट होने में कोई फायदा है?
शायद एक बेहतर उदाहरण:
public void Foo()
{
// Some logic here.
LogUtility.Log("some message");
}
public static void Log()
{
try
{
// Actual logging here.
}
catch (Exception ex)
{
// Eat it. Logging failures shouldn't stop us from processing.
}
}
यदि आप यहां सामान्य अपवाद नहीं पकड़ते हैं, तो आपको हर प्रकार के अपवाद को पकड़ना होगा। पैट्रिक का एक अच्छा बिंदु है जिसे OutOfMemoryException
इस तरह से नहीं निपटा जाना चाहिए। तो क्या होगा अगर मैं हर अपवाद को अनदेखा करना चाहता हूं लेकिन OutOfMemoryException
?
OutOfMemoryError
Exception
OutOfMemoryException
? सब कुछ के रूप में एक ही हैंडलिंग कोड?