C++ Academy · पाठ

try, catch, throw

अपवादों से त्रुटियाँ सँभालें

पाठ 1, कुल 4 में से13 चरण

try, catch, throw, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

throw से त्रुटियों का संकेत देना

throw कथन एक अपवाद उठाता है, वर्तमान पथ को छोड़ देता है और कॉल स्टैक में ऊपर किसी हैंडलर को खोजता है।

#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::runtime_error("boom");
    } catch (const std::exception& e) {
        std::cout << e.what() << "\n";
    }
}

ट्राइ और कैच

जो कोड अपवाद उठा सकता है, उसे try ब्लॉक में रखें; संबंधित हैंडलर catch ब्लॉक में उसके बाद आते हैं।

#include <iostream>
#include <stdexcept>

int divide(int a, int b) {
    if (b == 0) throw std::invalid_argument("divide by zero");
    return a / b;
}

int main() {
    try {
        std::cout << divide(10, 0) << "\n";
    } catch (const std::invalid_argument& e) {
        std::cout << "error: " << e.what() << "\n";
    }
}

const संदर्भ द्वारा पकड़ें

अपवादों को हमेशा const& द्वारा पकड़ें। मान द्वारा पकड़ने पर व्युत्पन्न अपवादों का कुछ भाग कट जाता है और अनावश्यक प्रतिलिपि बनती है।

एकाधिक catch ब्लॉक

हैंडलरों को सबसे विशिष्ट से सबसे सामान्य क्रम में लिखें। पहला मेल खाने वाला ब्लॉक चलता है।

#include <iostream>
#include <stdexcept>

int main() {
    try {
        throw std::out_of_range("bad index");
    } catch (const std::out_of_range& e) {
        std::cout << "range: " << e.what() << "\n";
    } catch (const std::exception& e) {
        std::cout << "other: " << e.what() << "\n";
    }
}

स्टैक का खुलना

जब कोई अपवाद उठाया जाता है, तो स्टैक खुलता है: throw और हैंडलर के बीच की हर स्थानीय वस्तु उलटे क्रम में नष्ट हो जाती है।

#include <iostream>
#include <stdexcept>

struct Trace {
    ~Trace() { std::cout << "unwound\n"; }
};

void f() {
    Trace t;
    throw std::runtime_error("x");
}

int main() {
    try { f(); } catch (...) { std::cout << "caught\n"; }
}

सर्वग्राही हैंडलर

catch (...) ब्लॉक किसी भी अपवाद प्रकार को पकड़ता है। इसका उपयोग कम ही करें, सामान्यतः लॉग दर्ज करके फिर से अपवाद उठाने के लिए।

फिर से अपवाद उठाना

हैंडलर के भीतर बिना तर्क वाला throw; वर्तमान अपवाद को फिर से उठाता है और उसका प्रकार सुरक्षित रखता है, ताकि कोई बाहरी हैंडलर उससे निपट सके।

#include <iostream>
#include <stdexcept>

void inner() { throw std::runtime_error("deep"); }

void middle() {
    try { inner(); }
    catch (...) { std::cout << "logged\n"; throw; }   // rethrow
}

int main() {
    try { middle(); } catch (const std::exception& e) { std::cout << e.what() << "\n"; }
}

मानक अपवाद पदानुक्रम

अधिकांश मानक अपवाद std::exception से व्युत्पन्न होते हैं, जो what() उपलब्ध कराता है। std::exception को पकड़ने पर वे सभी संभाल लिए जाते हैं।

मान द्वारा उठाएँ, संदर्भ द्वारा पकड़ें

अस्थायी अपवाद वस्तुओं को मान द्वारा उठाएँ; रनटाइम उन्हें सुरक्षित क्षेत्र में कॉपी करता है। कुछ भाग कटने से बचने के लिए संदर्भ द्वारा पकड़ें।

अपवाद बनाम त्रुटि कोड

अपवाद त्रुटि वाले पथ को सामान्य पथ से अलग करते हैं और उन्हें चुपचाप अनदेखा नहीं किया जा सकता — वापसी कोडों के विपरीत। इनका उपयोग केवल वास्तव में असाधारण परिस्थितियों के लिए करें।

अनपकड़े अपवाद प्रोग्राम समाप्त करते हैं

यदि कोई हैंडलर मेल नहीं खाता, तो std::terminate को कॉल किया जाता है और प्रोग्राम बंद हो जाता है। जिन अपवादों की आपको अपेक्षा है, उन्हें हमेशा संभालें।

त्वरित जाँच

अपवाद संचालन की अपनी समझ जाँचें।

पुनरावलोकन

आपने throw से त्रुटियाँ उठाना, try/catch से उन्हें संभालना और यह सीखा कि स्टैक खुलने पर स्थानीय वस्तुएँ नष्ट हो जाती हैं। const& द्वारा पकड़ें, हैंडलरों को विशिष्ट से सामान्य क्रम में रखें और बिना तर्क वाले throw; से फिर से अपवाद उठाएँ।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “try, catch, throw” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “try, catch, throw” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“try, catch, throw” में मैं क्या सीखूँगा?

अपवादों से त्रुटियाँ सँभालें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“try, catch, throw” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. try, catch, throw
  2. अपवाद सुरक्षा
  3. noexcept विनिर्देशक
  4. कस्टम अपवाद प्रकार
← C++ Academy पर वापस जाएँ