2012-01-25 12 views
10

संभव डुप्लिकेट:
When to use try/catch blocks?
Main method code entirely inside try/catch: Is it bad practice?
When to use Try Catch blocksक्या मुझे हमेशा अपना कोड कोशिश करने में लपेटना चाहिए ... ब्लॉक को पकड़ें?

अपवाद के बारे में कहीं भी हो सकता है, तो यह मुझे लगता है कि बनाया: मैं हमेशा try..catch ब्लॉकों में मेरी कोड लपेट चाहिए ?

यह सी # के लिए है।

(मैं यहाँ के रूप में मैं अभी भी एक नौसिखिया हूँ कुछ मौलिक लापता हो सकता है,)

संपादित करें: ऐसा लगता है कि यह वास्तव में एक बहुत ही स्मार्ट सवाल नहीं था। विद्यालय में हमने जो सीखा है, वह कोशिश करना है ... दुर्घटनाओं को रोकने के लिए पकड़ो। अपवाद के साथ हमने क्या किया था उपयोगकर्ता को यह बताने के लिए एक संदेशबॉक्स दिखा रहा था कि 'इस फ़ाइल को लिखते समय कुछ गलत हुआ'।

+1

हम किस भाषा के बारे में बात कर रहे हैं? – Timst

+0

@ टिमस्ट सी #। यह नहीं पता था कि इससे कोई फर्क पड़ता है, मेरे प्रश्न को अपडेट कर देगा। –

+1

@ केन व्हाइट मैंने एक खोज की, लेकिन यह उस सवाल को वापस नहीं आया। –

उत्तर

50

अपवाद किसी भी जगह के बारे में हो सकते हैं, इसलिए इससे मुझे लगता है: क्या मैं हमेशा अपने कोड को कोशिश कर सकता हूं .. कैच ब्लॉक?

अच्छा सवाल। यहां एक संबंधित प्रश्न है:

एक्स-वाइल्डिंग पागलपन लगभग कहीं भी हो सकते हैं, तो: क्या मुझे दिन में 24 घंटे कुल्हाड़ी प्रतिरोधी शरीर कवच पहनना चाहिए?

मैं पड़ोस में रहने के लिए भाग्यशाली हूं जहां कुल्हाड़ी के पंखों की संख्या पर्याप्त रूप से कम है कि जब मैं घर छोड़ता हूं तो मैं कवच नहीं पहनता। लेकिन मान लीजिए मैंने नहीं किया। क्या का सही समाधान हथियार पहनता है हर समय या जेल मैनियाक?

यदि आपके कार्यक्रम इतने सारे अपवाद फेंकते हैं कि आपको हर जगह उन अपवादों को संभालने की आवश्यकता है, तो आपको एक बड़ी समस्या है। उस समस्या का समाधान कवच नहीं करना है और हर जगह अपवाद हैंडलिंग रखना है। उस समस्या का समाधान है जो अपवाद को अपनाने वाले कोड को खत्म कर देता है, और यदि आप इसे खत्म नहीं कर सकते हैं, तो इसे कोड के एक छोटे से क्षेत्र में अलग करें जो अपवाद हैंडलिंग का उपयोग करता है।

+12

कुल्हाड़ी के लिए पागलपन के लिए +1। – Aaron

+4

[वेक्सिंग अपवाद] (http://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exceptions.aspx) - इस विषय पर एरिक लिपर्ट का लेख। – Brian

+0

+1 एक समानता का महान उपयोग। स्पष्टीकरण बहुत स्पष्ट बनाता है। – Sabuncu

3

बिलकुल नहीं। आपको जाने के लिए यहां एक शानदार CodeProject article on working with exceptions है।

लेकिन ओपी में आपके बिंदु पर अधिक, अपवादों को केवल संभाला जाना चाहिए जहां उन्हें संभालने की आवश्यकता है। इसका मतलब यह है कि एक अच्छी तरह से लागू आवेदन में ऐप में कुछ बिंदु होंगे (कोर्स के दायरे के आधार पर) जहां कई विशिष्ट, अपवाद-व्युत्पन्न अपवादों को संभाला जाएगा और यहां तक ​​कि कम जगहें (एक प्रति थ्रेड प्रति सर्वोत्तम अभ्यास सुझाव) जहां सामान्य अपवाद संभाला जाएगा।

अपवादों के साथ काम करते समय, त्रुटि की जानकारी लौटने वाले फ़ंक्शन के संदर्भ में नहीं सोचें। अपवाद आपके कॉल श्रृंखला के माध्यम से एक त्रुटि स्थिति को पार करने के टेडियम को बहुत कम करता है।

2

नहीं, आपको अपने सभी कोड को एक प्रयास में लपेटना नहीं चाहिए। मैंने यहां एक समान प्रश्न का उत्तर दिया dba.stackexchange.com - how much overhead an error in RDBMS has पर।

आम तौर पर आपको केवल कुछ विशिष्ट विशिष्टता का उपयोग करना चाहिए यदि आप त्रुटि संदेश के साथ कुछ विशिष्ट करना चाहते हैं, या यदि विफल कोड जो परिणाम उत्पन्न करता है जिसका उपयोग कहीं और नहीं किया जाता है। यदि एप्लिकेशन उपयोगकर्ता का सामना कर रहा है, तो आप स्पष्ट रूप से उन्हें कच्चे अपवाद संदेशों को नहीं देखना चाहते हैं। इन सभी मामलों में, आपको विफलता लॉगिंग करनी चाहिए ... अपवाद के लिए फँसने में कोई समझ नहीं है कि आप हैंडलिंग (खाली पकड़ = खराब) पर योजना नहीं बनाते हैं। लेकिन अन्यथा, आप एक अपवाद फेंकना चाहते हैं।

उदाहरण के लिए, आप डेटाबेस कॉल करते हैं और यह SQL अपवाद के साथ विफल रहता है। आपके कोड का अगला भाग उस परिणाम को संसाधित करने के लिए डिज़ाइन किया गया है, इसलिए आप एक अपवाद फेंकना चाहते हैं और प्रोग्राम निष्पादन को रोकना है।

यदि आपका कोड नियमित रूप से अपवाद (और उसमें से तर्क को चला रहा है) का उत्पादन कर रहा है, तो आपको शायद अपने दृष्टिकोण पर पुनर्विचार करना चाहिए।