Erlang 21 - 11. Errors and Error Handling

11 त्रुटियां और त्रुटि हैंडलिंग




erlang

11 त्रुटियां और त्रुटि हैंडलिंग

11.1 शब्दावली

त्रुटियों को मोटे तौर पर चार विभिन्न प्रकारों में विभाजित किया जा सकता है:

  • संकलन-समय त्रुटियाँ
  • तार्किक त्रुटियाँ
  • रन-टाइम त्रुटियाँ
  • उत्पन्न त्रुटियाँ

एक संकलन-समय त्रुटि, उदाहरण के लिए एक सिंटैक्स त्रुटि, बहुत परेशानी का कारण नहीं है क्योंकि यह संकलक द्वारा पकड़ा जाता है।

एक तार्किक त्रुटि तब होती है जब कोई कार्यक्रम उद्देश्य के अनुसार व्यवहार नहीं करता है, लेकिन दुर्घटना नहीं करता है। एक उदाहरण यह है कि जब ग्राफिकल यूजर इंटरफेस के बटन पर क्लिक किया जाता है तो कुछ भी नहीं होता है।

रन-टाइम त्रुटि तब होती है जब कोई क्रैश होता है। एक उदाहरण तब होता है जब एक ऑपरेटर गलत प्रकार के तर्कों पर लागू होता है। Erlang प्रोग्रामिंग भाषा में रन-टाइम त्रुटियों से निपटने के लिए अंतर्निहित विशेषताएं हैं।

रन-टाइम एरर को erlang:error(Reason, Args) erlang:error(Reason) या erlang:error(Reason, Args) भी अनुकरण किया जा सकता है।

रन-टाइम त्रुटि वर्ग error अपवाद का दूसरा नाम है।

एक उत्पन्न त्रुटि तब होती है जब कोड ही कॉल exit/1 या throw/1 कहता है। ध्यान दें कि रन-टाइम त्रुटियों का अनुकरण नहीं किया जाता है क्योंकि यहां उत्पन्न त्रुटियां हैं।

उत्पन्न त्रुटियां कक्षाओं से exit और throw अपवाद हैं।

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

एक प्रक्रिया जो समाप्त हो जाती है वह एक निकास संकेत के साथ एक निकास संकेत का उत्सर्जन करती है जो कुछ कहती है कि कौन सी त्रुटि हुई है। आम तौर पर, त्रुटि के बारे में कुछ जानकारी टर्मिनल पर मुद्रित होती है।

11.2 अपवाद

अपवाद रन-टाइम त्रुटियाँ या उत्पन्न त्रुटियाँ हैं और तीन अलग-अलग वर्गों के हैं, अलग-अलग मूल के साथ। try अभिव्यक्ति विभिन्न वर्गों के बीच अंतर कर सकती है, जबकि catch एक्सप्रेशन नहीं हो सकता है। उन्हें Expressions में वर्णित किया गया है।

कक्षा मूल
error रन-टाइम त्रुटि, उदाहरण के लिए, 1+a , या प्रक्रिया जिसे erlang:error/1,2 कहा जाता है
exit exit/1 नामक प्रक्रिया
throw throw/1 नामक प्रक्रिया

तालिका 11.1: अपवाद कक्षाएं।

अपवाद में इसकी कक्षा, एक एक्जिट कारण ( Exit Reason देखें) और एक स्टैक ट्रेस (जो अपवाद के कोड स्थान को खोजने में सहायता करता है) शामिल हैं।

स्टैक ट्रेस एक try अभिव्यक्ति के भीतर से एक चर के लिए बाध्य किया जा सकता है, और एक catch अभिव्यक्ति से वर्ग error अपवाद के लिए वापस आ गया है।

वर्ग error अपवाद को रन-टाइम त्रुटि के रूप में भी जाना जाता है।

कॉल-स्टैक बैक ट्रेस (स्टैकट्रेस)

स्टैक बैक-ट्रेस ( स्टैकट्रेस ) {Module,Function,Arity,Location} की एक सूची है। पहली टपल में फ़ील्ड Arity अपवाद के आधार पर एक एरिटी पूर्णांक के बजाय उस फ़ंक्शन कॉल की तर्क सूची हो सकती है।

Location दो-टुपल्स की एक (संभवतः खाली) सूची है जो फ़ंक्शन के स्रोत कोड में स्थान को इंगित कर सकती है। पहला तत्व एक परमाणु है जो दूसरे तत्व में जानकारी के प्रकार का वर्णन करता है। निम्नलिखित आइटम हो सकते हैं:

file
टपल का दूसरा तत्व एक स्ट्रिंग (वर्णों की सूची) है जो फ़ंक्शन के स्रोत फ़ाइल के फ़ाइल नाम का प्रतिनिधित्व करता है।
line
टपल का दूसरा तत्व स्रोत फ़ाइल में लाइन नंबर (एक पूर्णांक> 0) है जहां अपवाद हुआ या फ़ंक्शन को बुलाया गया था।
चेतावनी

डेवलपर्स को केवल डिबगिंग उद्देश्यों के लिए स्टैकट्रेस प्रविष्टियों पर भरोसा करना चाहिए।

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

इस नियम का एकमात्र अपवाद वर्ग error है जो बिना कारण के है जिसे पहले स्टैकट्रेस प्रविष्टि के रूप में प्रयास फ़ंक्शन के Module , Function और Arity को शामिल करने की गारंटी है।

11.3 एरलांग में रन-टाइम एरर्स का संचालन

प्रक्रियाओं के भीतर त्रुटि से निपटने

रन-टाइम त्रुटियों और अन्य अपवादों को रोकने या प्रक्रिया का उपयोग करके समाप्त करने की प्रक्रिया को रोकने के लिए संभव है, catch और try बारे में Expressions देखें।

प्रक्रियाओं के बीच हैंडलिंग में त्रुटि

प्रक्रियाएं अन्य प्रक्रियाओं की निगरानी कर सकती हैं और प्रक्रिया समाप्ति का पता लगा सकती हैं, Processes देख सकती हैं।

11.4 कारणों से बाहर निकलें

जब कोई रन-टाइम त्रुटि होती है, तो वह क्लास error का एक अपवाद है। बाहर निकलने का कारण टपल {Reason,Stack} , जहां Reason एक शब्द है जो त्रुटि के प्रकार को दर्शाता है:

कारण त्रुटि का प्रकार
badarg बुरा तर्क। तर्क गलत डेटा प्रकार का है, या अन्यथा बुरी तरह से बनता है।
badarith एक अंकगणितीय अभिव्यक्ति में खराब तर्क।
{badmatch,V} एक मैच अभिव्यक्ति का मूल्यांकन विफल रहा। मान V मिलान नहीं हुआ।
function_clause फ़ंक्शन कॉल का मूल्यांकन करते समय कोई मिलान फ़ंक्शन क्लॉज नहीं पाया जाता है।
{case_clause,V} case अभिव्यक्ति का मूल्यांकन करते समय कोई मिलान शाखा नहीं मिलती है। मान V मिलान नहीं हुआ।
if_clause if अभिव्यक्ति का मूल्यांकन करता है if कोई भी सच्ची शाखा नहीं मिलती है।
{try_clause,V} एक try अभिव्यक्ति के अनुभाग का मूल्यांकन करते समय कोई मिलान शाखा नहीं मिलती है। मान V मिलान नहीं हुआ।
undef फ़ंक्शन कॉल का मूल्यांकन करते समय फ़ंक्शन नहीं मिल सकता है।
{badfun,F} एक मजेदार F साथ कुछ गलत है।
{badarity,F} एक मजेदार तर्क की गलत संख्या पर लागू होता है। F मजेदार और तर्कों का वर्णन करता है।
timeout_value किसी प्राप्त में टाइमआउट receive..after अभिव्यक्ति पूर्णांक या infinity अलावा किसी और चीज़ के लिए मूल्यांकन किया infinity
noproc गैर-मौजूदा प्रक्रिया से लिंक करने की कोशिश कर रहा है।
{nocatch,V} catch बाहर किसी throw का मूल्यांकन करने की कोशिश करना। V फेंका हुआ शब्द है।
system_limit एक सिस्टम सीमा समाप्त हो गई है। सिस्टम सीमाओं की जानकारी के लिए Efficiency Guide देखें।

तालिका 11.2: बाहर निकलने के कारण

Stack फंक्शन कॉल का स्टैक है जिसका मूल्यांकन तब हुआ है, जब सबसे हाल ही के फंक्शन कॉल के साथ ट्यूपल्स {Module,Name,Arity} की एक सूची के रूप में दी गई थी। सबसे हालिया फ़ंक्शन कॉल टपल कुछ मामलों में {Module,Name,[Arg]}