डी प्रोग्रामिंग - अपवाद हैंडलिंग

एक अपवाद एक समस्या है जो एक कार्यक्रम के निष्पादन के दौरान उत्पन्न होती है। AD अपवाद एक असाधारण परिस्थिति की प्रतिक्रिया है जो किसी प्रोग्राम को चलाने के दौरान उत्पन्न होती है, जैसे कि शून्य से विभाजित करने का प्रयास।

अपवाद प्रोग्राम के एक भाग से दूसरे में नियंत्रण स्थानांतरित करने का एक तरीका प्रदान करते हैं। डी अपवाद हैंडलिंग तीन कीवर्ड पर बनाया गया हैtry, catch, तथा throw

  • throw- जब कोई समस्या दिखाई देती है तो एक प्रोग्राम एक अपवाद को फेंक देता है। यह एक का उपयोग करके किया जाता हैthrow कीवर्ड।

  • catch- एक कार्यक्रम एक अपवाद हैंडलर के साथ एक अपवाद को एक कार्यक्रम में उस स्थान पर पकड़ता है जहां आप समस्या को संभालना चाहते हैं। catch कीवर्ड अपवाद को पकड़ने का संकेत देता है।

  • try - ए tryब्लॉक कोड की पहचान करता है जिसके लिए विशेष अपवाद सक्रिय हैं। इसके बाद एक या एक से अधिक कैच ब्लॉक होते हैं।

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

try { 
   // protected code 
} 
catch( ExceptionName e1 ) { 
   // catch block 
} 
catch( ExceptionName e2 ) { 
   // catch block 
} 
catch( ExceptionName eN ) { 
   // catch block 
}

आप कई को सूचीबद्ध कर सकते हैं catch अपने मामले में विभिन्न प्रकार के अपवादों को पकड़ने के लिए बयान try ब्लॉक विभिन्न स्थितियों में एक से अधिक अपवाद उठाता है।

डी में फेंकने वाले अपवाद

अपवाद का उपयोग करके कोड ब्लॉक के भीतर कहीं भी फेंका जा सकता है throwबयान। फेंक बयानों के ऑपरेंड अपवाद के लिए एक प्रकार निर्धारित करता है और कोई भी अभिव्यक्ति हो सकती है और अभिव्यक्ति के परिणाम का प्रकार फेंक दिए गए अपवाद के प्रकार को निर्धारित करता है।

निम्न उदाहरण शून्य स्थिति से विभाजित होने पर एक अपवाद फेंकता है -

उदाहरण

double division(int a, int b) { 
   if( b == 0 ) { 
      throw new Exception("Division by zero condition!"); 
   }
   
   return (a/b); 
}

डी में पकड़ने के अपवाद

catch ब्लॉक के बाद tryब्लॉक किसी भी अपवाद को पकड़ता है। आप यह निर्दिष्ट कर सकते हैं कि आप किस प्रकार के अपवाद को पकड़ना चाहते हैं और यह उस अपवाद घोषणा से निर्धारित होता है जो कीवर्ड पकड़ के बाद कोष्ठक में दिखाई देती है।

try { 
   // protected code 
} 

catch( ExceptionName e ) { 
   // code to handle ExceptionName exception 
}

उपरोक्त कोड इसके अपवाद को पकड़ता है ExceptionNameप्रकार। यदि आप यह निर्दिष्ट करना चाहते हैं कि कैच ब्लॉक को किसी भी प्रकार के अपवाद को संभालने की कोशिश करनी चाहिए जो कि एक कोशिश ब्लॉक में डाली गई है, तो आपको एक दीर्घवृत्त डालनी चाहिए, ..., कोष्ठक के बीच अपवाद घोषणा को संलग्न करते हुए -

try { 
   // protected code 
} 

catch(...) { 
   // code to handle any exception 
}

निम्न उदाहरण शून्य अपवाद द्वारा एक विभाजन को फेंकता है। यह कैच ब्लॉक में पकड़ा गया है।

import std.stdio; 
import std.string;
  
string division(int a, int b) { 
   string result = "";  
   
   try {  
      if( b == 0 ) {
         throw new Exception("Cannot divide by zero!"); 
      } else { 
         result = format("%s",a/b); 
      } 
   } catch (Exception e) { 
      result = e.msg; 
   }
   
   return result; 
} 
 
void main () { 
   int x = 50; 
   int y = 0;  
   
   writeln(division(x, y));  
   
   y = 10; 
   writeln(division(x, y)); 
}

जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह पिछले अनुभाग में बनाई गई फ़ाइल को पढ़ता है और निम्नलिखित परिणाम उत्पन्न करता है -

Cannot divide by zero!
5