Exception Handling in C++

    जब हम किसी भी programming language में program बनाते है तो errors आना स्वाभाविक है। सभी programming languages में ये Errors दो प्रकार की होती है।

    1. Syntactical Errors
    2. Logical Errors

    Syntactical Error:-

    ये वे Errors होती है जो Program में गलत syntax लिखने से आती है। जैसे की हम गलती से यदि semicolon(;) लगाना भूल जाएँ या कुछ और गलती कर दे आदि।
    Syntactical errors, program के run होने से पहले ही detect हो जाती है। जब तक हम syntactical errors को correct नहीं करते है तब तक program run नहीं होता है।

    Logical Errors:-

    ये वे Errors होती है जब Program Completely Run होने के बाद भी सही Output नहीं आता है। और logical errors program में logic correct करने पर ठीक होती है।

    Syntactical errors और logical errors ये दोनों ही तरह की Errors run time पर नहीं आती है और program के Execution को नहीं रोकती है।
    Syntactical errors और logical errors के अलावा एक तीसरे तरीके की error भी होती है जो run time पर आती है और program के execution को रोक देती है। इस तरह की error को exception कहते है।

    Exception ऐसी conditions होती है जिनका program से कोई connection नहीं होता। Exceptions user की गलती से या System की limitation से आती है। जैसे की यदि किसी Array की limit केवल 10 है और loop के द्वारा 11 values Array में store करने का प्रयास कर रहे है। ऐसी situation में program एक exception generate करेगा।

    जब हम छोटे program बनाते है तो exceptions पर इतना ध्यान नहीं देते है क्योंकि उसका किसी पर कोई effect नहीं होता है। लेकिन जब हम real world software कोई बड़ा Software develop करते है तो ऐसी स्थिति में exceptions को handle करना अनिवार्य हो जाता है।

    Exceptions को handle करने के लिए C++ हमे exception handling mechanism provide करती है। इस mechanism के द्वारा User कोई भी exception आने पर उसे handle कर सकता है और program के directly terminate होने के बजाय कोई दूसरा code execute करके program को terminate कर सकता है। उदाहरण के लिए यूजर program के terminate होने से पहले एक message show करवा सकता हैं।

    C++ Exception Handling Keywords

    Exceptions को handle करने के लिए C++ कुछ built in keywords provide करती है। इन keywords के माध्यम से exceptions को आसानी से detect और handle कर सकते है।

    1. try:-

    ये एक block होता है। इसमें program के उस code को लिखते है जिससे exception generate होने की सम्भावना है। उदाहरण के लिए program में कोई calculation का या कोई दूसरा logical code है जिससे यूजर को लगता है की exception generate हो सकती है तो ऐसे code को यूजर try block के अंदर लिखता है।


        try{
        //Code that may generate exception
        }
       

    2. throw:-

    ये keyword try block में Use किया जाता है। इस keyword के द्वारा try block से exception को throw किया जाता है। ये exception catch block को throw की जाती है जो की exception को handle करता है। इस block के द्वारा किसी Particular variable को catch block को pass भी कर सकते है। जिसे catch block exception को handle करने के लिए use कर सकता है।

    3. catch:- 

    ये वो block होता है जँहा पर  exception को handle कर सकते है। इस block के द्वारा   exception आने पर कोई message भी show कर सकते है या फिर कोई दूसरा code भी execute करवा सकते है।
    ये block हमेशा try block के just बाद में आता है। एक से ज्यादा exceptions को handle करने के लिए  एक से अधिक catch block भी create कर सकते है।


        catch (exception - argument)
        {
            // Handle exception here
        }
       

    Exception Handling Process

    C++ में exception को handle करते समय  एक process से गुजरना होता  है। नीचे इस process को कुछ steps के द्वारा समझाया जा रहा है।

    • step 1 :- सबसे पहले exception detect की जाती है।
    • step 2 :- throw keyword के द्वारा exception throw की जाती है।
    • step 3 :- catch block द्वारा exception catch की जाती है।
    • step 4 :- catch block में exception को handle करते है।

        #include <iostream>
        using namespace std;

        int main()
        {
            int num = 5;
            int result;

            try
            {
                result = num / 0;
                throw 0;
            }
            catch (int e)
            {
                cout << "Divide by" << e << "exception occurred!!";    
            }

            return 0;
        }
       

    Output:-

    Divide by 0 exception occurred!!

    Explain Example:-

    ऊपर दिए गए उदाहरण में जब 5 को 0(zero) से divide किया जाता है तो exception generate होती है। फिर इस exception को catch block में handle किया गया है।

    Exception Handling in C++

    1) यह Example C++ में Exception handling दिखाने के लिए एक simple example है। प्रोग्राम का आउटपुट try/catch blocks के execution के flow को explains कर रहा हैं।


        #include <iostream>
        using namespace std;

        int main()
        {
            int x = -1;

            // Some code
            cout << "Before try \n";
            try
            {
                cout << "Inside try \n";
                if (x < 0)
                {
                    throw x;
                    cout << "After throw (Never executed) \n";
                }
            }
            catch (int x)
            {
                cout << "Exception Caught \n";
            }

            cout << "After catch (Will be executed) \n";
            return 0;
        }

    Output:-

    Before try 
    Inside try 
    Exception Caught 
    After catch (Will be executed)

    2) catch(…) एक special catch block है जिसे 'catch all' कहा जाता है जिसका उपयोग सभी प्रकार के exceptions को catch के लिए किया जा सकता है। उदाहरण के लिए, निम्नलिखित प्रोग्राम में, एक int को exception के रूप में throw किया जाता है, लेकिन int के लिए कोई catch block नहीं है, इसलिए catch(…) block को execute किया जाएगा।


        #include <iostream>
        using namespace std;

        int main()
        {
            try
            {
                throw 10;
            }
            catch (char *excp)
            {
                cout << "Caught " << excp;
            }
            catch (...)
            {
                cout << "Default Exception\n";    
            }
            return 0;
        }

    Output:-

    Default Exception

    Post a Comment

    0 Comments