खोज…


कोशिश करो ... पकड़ो ... अंत में स्टेटमेंट

संरचना:

Try
    'Your program will try to run the code in this block.  
    'If any exceptions are thrown, the code in the Catch Block will be executed,
    'without executing the lines after the one which caused the exception.
Catch ex As System.IO.IOException
    'If an exception occurs when processing the Try block, each Catch statement
    'is examined in textual order to determine which handles the exception. 
    'For example, this Catch block handles an IOException.
Catch ex As Exception
    'This catch block handles all Exception types.
    'Details of the exception, in this case, are in the "ex" variable.
    'You can show the error in a MessageBox with the below line.
    MessageBox.Show(ex.Message)
Finally
    'A finally block is always executed, regardless of if an Exception occurred.
End Try

उदाहरण कोड:

Try
    Dim obj = Nothing
    Dim prop = obj.Name 'This line will throw a NullReferenceException

    Console.WriteLine("Test.") ' This line will NOT be executed
Catch ex As System.IO.IOException
    ' Code that reacts to IOException.
Catch ex As NullReferenceException
    ' Code that reacts to a NullReferenceException
    Console.WriteLine("NullReferenceException: " & ex.Message)
    Console.WriteLine("Stack Trace: " & ex.StackTrace)
Catch ex As Exception
    ' Code that reacts to any other exception.
Finally   
    ' This will always be run, regardless of if an exception is thrown.
    Console.WriteLine("Completed")
End Try

कस्टम अपवाद बनाना और फेंकना

आप एक कस्टम अपवाद बना सकते हैं और उन्हें अपने फ़ंक्शन के निष्पादन के दौरान फेंक सकते हैं। एक सामान्य अभ्यास के रूप में आपको केवल एक अपवाद फेंकना चाहिए जब आपका फ़ंक्शन अपनी परिभाषित कार्यक्षमता को प्राप्त नहीं कर सकता।

Private Function OpenDatabase(Byval Server as String, Byval User as String, Byval Pwd as String)
    if Server.trim="" then 
        Throw new Exception("Server Name cannot be blank")
    elseif User.trim ="" then 
        Throw new Exception("User name cannot be blank")
    elseif Pwd.trim="" then 
        Throw new Exception("Password cannot be blank")
    endif

    'Here add codes for connecting to the server
End function

डेटाबेस ऑपरेशन में कैच का प्रयास करें

कैच सेगमेंट में रोलबैक स्टेटमेंट रखकर आप कोशिश कर सकते हैं।

    Try            
        'Do the database operation...        
        xCmd.CommandText = "INSERT into ...."
        xCmd.ExecuteNonQuery()

        objTrans.Commit()
        conn.Close()
    Catch ex As Exception 
        'Rollback action when something goes off           
        objTrans.Rollback()
        conn.Close()
    End Try

अन-कैटसेबल एक्सेप्शन

हालांकि Catch ex As Exception दावा करता है कि यह सभी अपवादों को संभाल सकता है - एक अपवाद हैं (कोई सज़ा नहीं)।

Imports System
Static Sub StackOverflow() ' Again no pun intended
    StackOverflow()
End Sub
Static Sub Main()
    Try
        StackOverflow()
    Catch ex As Exception
        Console.WriteLine("Exception caught!")
    Finally
        Console.WriteLine("Finally block")
    End Try
End Sub

ओह ... एक अन-पकड़ा हुआ System.StackOverflowException जबकि कंसोल कुछ भी प्रिंट नहीं करता था! MSDN के अनुसार,

.NET फ्रेमवर्क 2.0 के साथ शुरू, आप एक StackOverflowException ऑब्जेक्ट को एक कोशिश / कैच ब्लॉक के साथ नहीं पकड़ सकते हैं, और इसी प्रक्रिया को डिफ़ॉल्ट रूप से समाप्त किया जाता है। नतीजतन, आपको स्टैक ओवरफ्लो का पता लगाने और रोकने के लिए अपना कोड लिखना चाहिए।

तो, System.StackOverflowException अन-कैटसेबल है। उस से सावधान!

गंभीर अपवाद

आम तौर पर अधिकांश अपवाद महत्वपूर्ण नहीं होते हैं, लेकिन कुछ वास्तव में गंभीर अपवाद हैं जिन्हें आप संभालने में सक्षम नहीं हो सकते हैं, जैसे कि प्रसिद्ध System.StackOverflowException । हालाँकि, Catch ex As Exception जैसे कि System.OutOfMemoryException , System.BadImageFormatException और System.InvalidProgramException जैसी अन्य चीजें भी छुप सकती हैं। यदि आप उन्हें सही ढंग से संभाल नहीं सकते हैं तो उन्हें छोड़ना एक अच्छा प्रोग्रामिंग अभ्यास है। इन अपवादों को फ़िल्टर करने के लिए, हमें एक सहायक विधि की आवश्यकता है:

Public Shared Function IsCritical(ex As Exception) As Boolean
    Return TypeOf ex Is OutOfMemoryException OrElse
           TypeOf ex Is AppDomainUnloadedException OrElse
           TypeOf ex Is AccessViolationException OrElse
           TypeOf ex Is BadImageFormatException OrElse
           TypeOf ex Is CannotUnloadAppDomainException OrElse
           TypeOf ex Is ExecutionEngineException OrElse ' Obsolete one, but better to include
           TypeOf ex Is InvalidProgramException OrElse
           TypeOf ex Is System.Threading.ThreadAbortException
End Function

उपयोग:

Try
    SomeMethod()
Catch ex As Exception When Not IsCritical(ex)
    Console.WriteLine("Exception caught: " & ex.Message)
End Try


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow