Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी के एरनो एक्सेप्शन को समझें: उन्हें समझने और संभालने के लिए एक व्यावहारिक गाइड

अगर आपने कभी रूबी के एक्सेप्शन हायरार्की पर नज़र डाली है, तो आपने कुछ अजीब देखा होगा। सामान्य एक्सेप्शन जैसे RuntimeError और NoMethodError के अलावा, वहां Errno::* का एक अजीब सा रेफरेंस होता है।

Exception StandardError ... SystemCallError Errno::* ... 

अगर आपने कभी डिस्क फुल होने पर डिस्क पर लिखने की कोशिश की है, या फेल हो रहे नेटवर्क पर API कॉल करने की कोशिश की है, तो आपने शायद इस प्रकार के एरर को एक्शन में देखा होगा। आप इसे अभी ट्रिगर कर सकते हैं एक ऐसी फाइल खोलने की कोशिश करके जो मौजूद नहीं है।

irb> File.open("badfilename.txt") Errno::ENOENT: No such file or directory @ rb_sysopen - badfilename.txt from (irb):9:in `initialize' from (irb):9:in `open' from (irb):9 from /Users/snhorne/.rbenv/versions/2.1.0/bin/irb:11:in `<main>' 

लेकिन आखिर ये एरनो एक्सेप्शन हैं क्या? और इन्हें अन्य प्रकार के एक्सेप्शन से अलग क्यों माना जाता है?

रूबी को OS के अनुकूल बनाना

एरनो एक्सेप्शन अनिवार्य रूप से एक एडॉप्टर हैं। वे ऑपरेटिंग सिस्टम एरर को रूबी के एक्सेप्शन सिस्टम से जोड़ते हैं। ऑपरेटिंग सिस्टम एरर को रूबी से अलग तरीके से संभालता है, इसलिए आपके पास किसी न किसी प्रकार का एडॉप्टर होना अनिवार्य है।

रूबी में, एरर को आमतौर पर एक्सेप्शन के रूप में रिपोर्ट किया जाता है। लेकिन ऑपरेटिंग सिस्टम एरर आमतौर पर सिर्फ इंटीजर होते हैं। इसलिए रूबी हर संभावित OS एरर के लिए एक एक्सेप्शन क्लास परिभाषित करता है। फिर यह इन सभी एक्सेप्शन को मॉड्यूल नामक Errno में रख देता है।

हम IRB का उपयोग करके इस मॉड्यूल में सभी एक्सेप्शन देख सकते हैं। और यकीन मानिए, इनकी संख्या बहुत अधिक है!

irb> Errno.constants => [:NOERROR, :EPERM, :ENOENT, :ESRCH, :EINTR, :EIO, :ENXIO, :E2BIG, :ENOEXEC, :EBADF, :ECHILD, :EAGAIN, :ENOMEM, :EACCES, :EFAULT, :ENOTBLK, :EBUSY, :EEXIST, :EXDEV, :ENODEV, :ENOTDIR, :EISDIR, :EINVAL, :ENFILE, :EMFILE, :ENOTTY, :ETXTBSY, :EFBIG, :ENOSPC, :ESPIPE, :EROFS, :EMLINK, :EPIPE, :EDOM, :ERANGE, :EDEADLK, :ENAMETOOLONG, :ENOLCK, :ENOSYS, :ENOTEMPTY, :ELOOP, :EWOULDBLOCK, :ENOMSG, :EIDRM, :ECHRNG, :EL2NSYNC, :EL3HLT, :EL3RST, :ELNRNG, :EUNATCH, :ENOCSI, :EL2HLT, :EBADE, :EBADR, :EXFULL, :ENOANO, :EBADRQC, :EBADSLT, :EDEADLOCK, :EBFONT, :ENOSTR, :ENODATA, :ETIME, :ENOSR, :ENONET, :ENOPKG, :EREMOTE, :ENOLINK, :EADV, :ESRMNT, :ECOMM, :EPROTO, :EMULTIHOP, :EDOTDOT, :EBADMSG, :EOVERFLOW, :ENOTUNIQ, :EBADFD, :EREMCHG, :ELIBACC, :ELIBBAD, :ELIBSCN, :ELIBMAX, :ELIBEXEC, :EILSEQ, :ERESTART, :ESTRPIPE, :EUSERS, :ENOTSOCK, :EDESTADDRREQ, :EMSGSIZE, :EPROTOTYPE, :ENOPROTOOPT, :EPROTONOSUPPORT, :ESOCKTNOSUPPORT, :EOPNOTSUPP, :EPFNOSUPPORT, :EAFNOSUPPORT, :EADDRINUSE, :EADDRNOTAVAIL, :ENETDOWN, :ENETUNREACH, :ENETRESET, :ECONNABORTED, :ECONNRESET, :ENOBUFS, :EISCONN, :ENOTCONN, :ESHUTDOWN, :ETOOMANYREFS, :ETIMEDOUT, :ECONNREFUSED, :EHOSTDOWN, :EHOSTUNREACH, :EALREADY, :EINPROGRESS, :ESTALE, :EUCLEAN, :ENOTNAM, :ENAVAIL, :EISNAM, :EREMOTEIO, :EDQUOT, :ECANCELED, :EKEYEXPIRED, :EKEYREJECTED, :EKEYREVOKED, :EMEDIUMTYPE, :ENOKEY, :ENOMEDIUM, :ENOTRECOVERABLE, :EOWNERDEAD, :ERFKILL, :EAUTH, :EBADRPC, :EDOOFUS, :EFTYPE, :ENEEDAUTH, :ENOATTR, :ENOTSUP, :EPROCLIM, :EPROCUNAVAIL, :EPROGMISMATCH, :EPROGUNAVAIL, :ERPCMISMATCH, :EIPSEC] 

लेकिन इनके नाम इतने गूढ़ क्यों हैं? मेरा मतलब है, मैं कैसे अंदाज़ा लगा सकता हूँ कि ENOENT का अर्थ "फाइल नहीं मिली" है?

...इसका वास्तव में एक बहुत ही सरल उत्तर है।

लिबसी से पूरी तरह कॉपी किया गया

जिसने भी सबसे पहले Errno मॉड्यूल बनाया, उसने एरर के नाम सीधे libc से कॉपी कर लिए। इसलिए ENOENT, C में, एक मैक्रो का नाम है जिसमें वह इंटीजर एरर कोड होता है जो OS तब लौटाता है जब वह कोई फाइल नहीं ढूंढ पाता।

तो यह पता लगाने के लिए कि इनमें से प्रत्येक क्या करता है, तरकीब यह है कि C स्टैंडर्ड लाइब्रेरी के दस्तावेज़ देखें। आप उनमें से एक बड़ी सूची यहां पा सकते हैं। मैंने नीचे कुछ अधिक प्रासंगिक लोगों को उद्धृत किया है:

EPERM ऑपरेशन अनुमति नहीं; आप फाइल तक नहीं पहुंच सकते जब तक आपके पास अनुमति न हो।
ENOENT फाइल या डायरेक्टरी नहीं मिली।
EIO इनपुट/आउटपुट एरर; आमतौर पर फिजिकल रीड या राइट एरर के लिए उपयोग किया जाता है।
EBADF खराब फाइल डिस्क्रिप्टर। आपको यह एरर मिलेगा अगर आप किसी ऐसी फाइल पर लिखने की कोशिश करते हैं जिसे आपने केवल पढ़ने के लिए खोला था।
ECHILD आपने चाइल्ड प्रोसेस में हेरफेर करने की कोशिश की, लेकिन कोई चाइल्ड प्रोसेस नहीं हैं।
ENOMEM आपकी RAM खत्म हो गई है, और आप अधिक वर्चुअल मेमोरी आवंटित नहीं कर सकते।
EACCES अनुमति अस्वीकृत; फाइल अनुमतियां प्रयास किए गए ऑपरेशन की अनुमति नहीं देतीं।
ENOTBLK आपने किसी सामान्य फाइल को HDD जैसे डिवाइस के रूप में माउंट करने की कोशिश की।
EBUSY संसाधन व्यस्त; एक सिस्टम संसाधन जिसे साझा नहीं किया जा सकता, पहले से ही उपयोग में है। उदाहरण के लिए, यदि आप वर्तमान में माउंटेड फाइलसिस्टम की रूट वाली फाइल को हटाने का प्रयास करते हैं, तो आपको यह एरर मिलता है।
EEXIST फाइल मौजूद है; एक मौजूदा फाइल को उस संदर्भ में निर्दिष्ट किया गया था जहां केवल नई फाइल निर्दिष्ट करना समझ में आता है।
ENOTDIR एक फाइल जो डायरेक्टरी नहीं है, उसे तब निर्दिष्ट किया गया जब डायरेक्टरी की आवश्यकता थी।
EISDIR फाइल एक डायरेक्टरी है; आप डायरेक्टरी को लिखने के लिए नहीं खोल सकते, या उस पर हार्ड लिंक नहीं बना या हटा सकते।
EINVAL अमान्य तर्क। यह लाइब्रेरी फंक्शन में गलत तर्क पास करने की विभिन्न प्रकार की समस्याओं को इंगित करने के लिए उपयोग किया जाता है।
EMFILE वर्तमान प्रोसेस में बहुत सारी फाइलें खुली हैं और वह और नहीं खोल सकता। डुप्लिकेट डिस्क्रिप्टर भी इस सीमा की ओर गिने जाते हैं।
EFBIG फाइल बहुत बड़ी; फाइल का आकार सिस्टम द्वारा अनुमत आकार से बड़ा होगा।
ENOSPC डिवाइस पर कोई स्थान शेष नहीं; डिस्क फुल होने के कारण फाइल पर राइट ऑपरेशन विफल हुआ।
ESPIPE अमान्य सीक ऑपरेशन (जैसे पाइप पर)।
EROFS रीड-ओनली फाइल सिस्टम पर किसी चीज़ को संशोधित करने का प्रयास किया गया।
EPIPE टूटा हुआ पाइप; पाइप के दूसरे छोर से पढ़ने वाली कोई प्रोसेस नहीं है।
ENOTSOCK सॉकेट की आवश्यकता होने पर एक फाइल जो सॉकेट नहीं है, निर्दिष्ट की गई।
ENETUNREACH सॉकेट ऑपरेशन विफल हुआ क्योंकि रिमोट होस्ट वाला सबनेट पहुंच योग्य नहीं था।
ENETRESET नेटवर्क कनेक्शन रीसेट हो गया क्योंकि रिमोट होस्ट क्रैश हो गया।
ECONNABORTED नेटवर्क कनेक्शन स्थानीय रूप से निरस्त कर दिया गया।
ECONNRESET नेटवर्क कनेक्शन स्थानीय होस्ट के नियंत्रण से बाहर के कारणों से बंद कर दिया गया, जैसे रिमोट मशीन रीबूट होना या अनरिकवरेबल प्रोटोकॉल उल्लंघन।
ENOBUFS कर्नेल के I/O ऑपरेशन के लिए बफ़र सभी उपयोग में हैं। GNU में, यह एरर हमेशा ENOMEM का पर्याय है; आपको नेटवर्क ऑपरेशन से एक या दूसरा मिल सकता है।
EISCONN आपने पहले से कनेक्टेड सॉकेट को कनेक्ट करने का प्रयास किया। Connecting देखें।
ENOTCONN सॉकेट किसी से कनेक्ट नहीं है। आपको यह एरर तब मिलता है जब आप डेटा ट्रांसमिट करने की कोशिश करते हैं बिना पहले डेटा के लिए डेस्टिनेशन निर्दिष्ट किए।
EDESTADDRREQ सॉकेट के लिए कोई डिफ़ॉल्ट डेस्टिनेशन एड्रेस सेट नहीं था। आपको यह एरर तब मिलता है जब आप कनेक्शनलेस सॉकेट पर डेटा ट्रांसमिट करने की कोशिश करते हैं बिना पहले connect के साथ डेस्टिनेशन निर्दिष्ट किए।
ESHUTDOWN सॉकेट पहले ही बंद कर दिया गया है।
ETIMEDOUT निर्दिष्ट टाइमआउट वाले सॉकेट ऑपरेशन को टाइमआउट अवधि के दौरान कोई प्रतिक्रिया नहीं मिली।
ECONNREFUSED रिमोट होस्ट ने नेटवर्क कनेक्शन की अनुमति देने से इनकार कर दिया (आमतौर पर क्योंकि वह अनुरोधित सेवा नहीं चला रहा है)।
EHOSTDOWN अनुरोधित नेटवर्क कनेक्शन के लिए रिमोट होस्ट डाउन है।
EHOSTUNREACH अनुरोधित नेटवर्क कनेक्शन के लिए रिमोट होस्ट पहुंच योग्य नहीं है।
ENOTEMPTY डायरेक्टरी खाली नहीं है, जहां खाली डायरेक्टरी की उम्मीद थी। आमतौर पर, यह एरर तब होता है जब आप डायरेक्टरी हटाने की कोशिश कर रहे होते हैं।
EPROCLIM इसका मतलब है कि प्रति-उपयोगकर्ता नई प्रोसेस की सीमा fork के प्रयास से पार हो जाएगी। विवरण के लिए Limits on Resources, RLIMIT_NPROC लिमिट देखें।

  1. RBS: रूबी का नया टाइप एनोटेशन सिस्टम समझाया गया RBS: रूबी का नया टाइप एनोटेशन सिस्टम समझाया गया

    RBS रूबी के लिए एक नया टाइप सिंटैक्स फॉर्मेट लैंग्वेज है। RBS आपको .rbs एक्सटेंशन वाली नई फाइलों में अपने रूबी कोड में टाइप एनोटेशन जोड़ने की सुविधा देता है। ये कुछ इस तरह दिखते हैं: class MyClass def my_method : (my_param: String) -> String end RBS के साथ टाइप एनोटेशन प्रदान करके आपको निम्न लाभ

  1. रूबी के साथ इंसर्शन सॉर्ट में महारत: एक चरण-दर-चरण गाइड रूबी के साथ इंसर्शन सॉर्ट में महारत: एक चरण-दर-चरण गाइड

    नोट: यह रूबी के साथ विभिन्न सॉर्टिंग एल्गोरिदम को लागू करने पर एक श्रृंखला का भाग 4 है। भाग 1 ने बबल सॉर्ट का पता लगाया, भाग 2 ने सिलेक्शन सॉर्ट का पता लगाया, और भाग 3 ने मर्ज सॉर्ट का पता लगाया। जैसा कि हम डेटा को सॉर्ट करने के लिए विभिन्न पद्धतियों का पता लगाना जारी रखते हैं, हम इंसर्शन सॉर्ट की

  1. वर्डप्रेस अनिवार्यताएँ: फ़ाइल संरचना और डेटाबेस में महारत हासिल करना - शुरुआती के लिए वर्डप्रेस अनिवार्यताएँ: फ़ाइल संरचना और डेटाबेस में महारत हासिल करना - शुरुआती के लिए

    सामान्य परिस्थितियों में, वर्डप्रेस फ़ाइल संरचना के बारे में चिंतित होने की कोई वास्तविक आवश्यकता नहीं है। वर्डप्रेस का एक बेहतरीन wp-admin इंटरफ़ेस है जो आपको यह जाने बिना अपनी साइट चलाने पर ध्यान केंद्रित करने में सक्षम बनाता है कि हुड के नीचे इंजन कैसे काम करता है। हालाँकि, अपनी साइट के नट और बोल