2010-07-29 13 views
6

के बाद कोड जारी रखें मैं जानना चाहता हूं कि अपवाद के बाद प्रोग्राम जारी रखने का कोई तरीका है या नहीं। उदाहरण के लिए:अपवाद

Try 
    line 1 
    line 2 
    line 3 
    line 4 (here the exception is thrown and jumps to the catch) 
    line 5 <-- i would like the program to continue its execution loging the error 
    line 6 

Catch ex as Exception 
    log(ex.tostring) 
End Try 

धन्यवाद।

उत्तर

10

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

Try 
    line 1 
    line 2 
    line 3 
    Try 
    line 4 (here the exception is throw and jumps to the catch) 
    Catch iox as IOException ' or whatever type is being thrown 
    'log it 
    End Try 
    line 5 <-- i would like the program to continue its execution after loggin the error 
    line 6 

Catch ex as Exception 
    log(ex.tostring) 
End Try 
0

वीबीनेट इस प्रकार के निर्माण का समर्थन नहीं करता है। एक बार अपवाद स्टैक को खोलने के बाद, यह फिर से अवांछित नहीं हो सकता है। कुछ भाषाएं आपको अपवाद को फिर से शुरू करने की अनुमति देती हैं, लेकिन उन्हें अधिक परिष्कृत स्टैक प्रबंधन की आवश्यकता होती है - अनिवार्य रूप से कोरआउट।

0
try 
    line 1 
catch ex as exception 
    log(ex.tostring) 
end try 
try 
    line 2 
catch ex as exception 
    log(ex.tostring) 
end try 
try 
    line 3 
catch ex as exception 
    log(ex.tostring) 
end try 
try 
    line 4 (here the exception is throw and jumps to the catch) 
catch ex as exception 
    log(ex.tostring) 
end try 
try 
    line 5 <-- i would like the program to continue its execution after loggin the error 
catch ex as exception 
    log(ex.tostring) 
end try 
try 
    line 6 
catch ex as exception 
end try 
+7

क्या आपको टाइप करने के बाद स्नान करने की आवश्यकता महसूस हुई? :) –

+0

ओह ... आपने मुझे इसे हराया :) और यदि आप सभी कोशिश-पकड़ ब्लॉक बनाने की तरह महसूस नहीं करते हैं तो हमेशा डरावनी गोटो स्टेटमेंट होता है। लेकिन मैं यह सुझाव नहीं दूंगा! –

+0

uff ठीक है ऐसा लगता है कि यह जाने का एकमात्र तरीका है .. धन्यवाद – carlos

3

हालांकि On Error Resume Nextstill available in VB.NET है, यह पारस्परिक रूप से संरचित अपवाद हैंडलिंग का पसंदीदा तरीका करने के लिए विशेष है।

इसके बजाय, मैं एक Try..Catch..Finally ब्लॉक के Finally खंड के उपयोग की सलाह देते सुनिश्चित करने के लिए Line 5 and Line 6 निष्पादित हो, भले ही लाइन 4 (या किसी भी पूर्ववर्ती लाइन) फेंकता होगा।

Try 
    line 1 
    line 2 
    line 3 
    line 4 
Catch ex as Exception 
    log(ex.tostring) 
Finally 
    line 5 
    line 6 
End Try 
+0

इस मामले में अपवाद एक dbnullconversion द्वारा डीबी से पढ़ने के बाद int में है ... लेकिन यह कई अन्य लोगों का सिर्फ एक डेटा था, और इसलिए मैं पढ़ना जारी रखना चाहता था .. धन्यवाद !! टिप्पणियों के लिए! – carlos

0

मैं "अपवाद हैंडलिंग के लिए उत्तम आचरण" गलत नहीं कर रहा हूँ, तो कहते हैं। यदि आप dbnull की जांच कर सकते हैं तो ऐसा करें।

6

कुछ परिस्थितियों, उदा उपयोग

नहीं अच्छा अभ्यास हर जगह 'के लिए आगे बढ़ें', लेकिन उपयोगी

Dim dir As New DirectoryInfo("C:\") 
    Dim strSearch As String = ("boot.ini") 

    For Each SubDir As DirectoryInfo In dir.GetDirectories 
     Try 
      For Each File As FileInfo In SubDir.GetFiles 
       Console.WriteLine("Sub Directory: {0}", SubDir.Name) 
       If File.Name = strSearch Then 
        Console.Write(File.FullName) 
       End If 
      Next 
     Catch ex As Exception 
      Console.WriteLine(ex.Message) 
      Continue For 
     End Try 
    Next 
0

यहाँ कोड में एक उदाहरण है::

Sub yourSub() 
    Dim cDelegate As CatchDelegate = Sub(ex As Exception) 
             Your Catch Code 
            End Sub 
line 1 
line 2 
line 3 
TCResumeNext(Sub() line 4, cDelegate) 
line 5 
line 6 
End Sub 

Delegate Sub CatchDelegate(e As Exception) 

Sub TCResumeNext(tryDelegate As [Delegate], catchDelgate As CatchDelegate) 
    Try 
    tryDelegate.DynamicInvoke() 
    Catch ex As Exception 
     catchDelgate.DynamicInvoke(ex) 
    End Try 
End Sub 
-1

काफी एक पुराने पोस्ट लेकिन दूसरों की खातिर जबकि हैंडलिंग कुछ निर्देशिकाओं करने के लिए पहुँच से मना कर एक फाइल पाते हैं। व्यक्तिगत रूप से मैं इस मामले में "अगली त्रुटि फिर से शुरू करने" का उपयोग करता हूं, यह एक आवश्यक बुराई है

+1

किसी भी स्थिति में कोई पेशेवर डेवलपर कभी भी 'अगली त्रुटि फिर से शुरू' पर उपयोग नहीं करेगा। एक बार जब आप इस सभी त्रुटि का उपयोग करते हैं तो उन्हें अनदेखा कर दिया जाता है ..... इसका अनुवाद करने का मतलब है, 'मुझे एक त्रुटि मिली है और मुझे परवाह नहीं है' .... – Monty

संबंधित मुद्दे