आप त्रुटि कोड कैसे प्रदान करते हैं?


13

मध्यम आकार की परियोजना का विकास करते समय, क्या आप त्रुटि कोड की पहचान, निर्माण और रखरखाव करते हैं?

मैं अपने जीवन के लिए ऐसा करने की एक सरल और साफ विधि के बारे में नहीं सोच सकता। मेरे कुछ विचार कक्षा के नाम और विधि के नाम को एक पूर्णांक स्ट्रिंग में बदल देते हैं, लेकिन यह उपयोगकर्ता के लिए इस तथ्य के शीर्ष पर प्रदर्शित करने का लंबा तरीका है कि विधि के नाम और वर्ग के नाम बदल सकते हैं (उम्मीद है कि नहीं!)। अन्य लोग केवल एक वृद्धि लॉग सिस्टम का उपयोग कर रहे हैं (यानी जब भी मैं एक नया त्रुटि संदेश बनाता हूं, तो बस अंतिम त्रुटि आईडी में 1 जोड़ें)। लेकिन यह पूरी तरह से असंगठित है।

अधिक विशिष्ट होने के लिए मैं त्रुटि कोड के बारे में बात कर रहा हूं जैसे:

Error 401 Unauthorized.


1
त्रुटि कोड? जैसे "मैजिक नंबर"? उदाहरण के लिए ... ERROR 001. तब आप एक सूची में जाते हैं और ERROR 001 पढ़ते हैं इसका मतलब है कि bla bla bla ... हाँ?
वुल्लो

@wleao - यासिर। मैं उस प्रश्न को शामिल करने के लिए अपने प्रश्न का संपादन करूंगा। धन्यवाद।
ahodder


जैसा कि आपने अपने प्रश्न में संपादित किया है। देखिए कि वे इसे http के साथ कैसे करते हैं। मुझे नहीं पता कि क्या जादू की संख्या का उपयोग करना एक अच्छा विचार है। हालांकि, यदि आप वास्तव में इसे करने के लिए तैयार हैं, तो उनकी अवधारणाओं का पालन करें। उदाहरण के लिए, उनके पास त्रुटियों का एक वर्गीकरण है (क्या आपके पास ऐसा है?)।
wleao

@wleao - अभी तक नहीं, लेकिन आपके लिए और Péter Török के लिए धन्यवाद, मैं निश्चित रूप से एक बनाऊंगा। :)
aodder

जवाबों:


16

नहीं।

त्रुटि कोड एक अभिवादन है, वे तु पुराने दिनों से स्टेम करते हैं जब आउटपुट वास्तव में कठिन और महंगा था, और त्रुटि स्थिति का संकेत करने का एकमात्र तरीका फ्रंट पैनल लाइट्स के एक गुच्छा के माध्यम से हो सकता है: pdp11 / 70 फ्रंट पैनल

इन दिनों, हमारे पास परिपक्व अपवाद हैंडलिंग है जो हर मुख्यधारा की भाषा में बहुत अधिक निर्मित है। इसका इस्तेमाल करें। उपयोगकर्ता को वे जानकारी दें जिनके साथ वे काम कर सकते हैं; उन्हें तकनीकी ब्ला-ब्ला के साथ परेशान न करें, बल्कि उन्हें मोटे तौर पर बताएं कि क्या गलत हुआ और वे इसके बारे में क्या कर सकते हैं। लॉगिंग के लिए, बस अपने अपवाद वर्णनात्मक नाम दें, और नाम लॉग करें। याद रखना आसान है, और grep या समान खोज टूल का उपयोग करके खोजना भी आसान है।

अपवाद, निश्चित रूप से, जब आप उन स्थितियों के लिए प्रोग्रामिंग कर रहे हैं जहां आउटपुट अभी भी कठिन और महंगा है, जैसे कि एम्बेडेड सिस्टम या नेटवर्क प्रोटोकॉल। HTTP अभी भी संख्यात्मक प्रतिक्रिया कोड का उपयोग करता है क्योंकि वे कुशलता से पार्स करने के लिए बहुत आसान हैं - कुछ स्थितियों में, सिर्फ पहला अंक पढ़ना आपको पहले से ही पर्याप्त बता सकता है, और आप बाकी पैकेट को त्याग सकते हैं।


विस्तृत उत्तर के लिए धन्यवाद, इससे बहुत कुछ पता चलता है और यह जानना अच्छा है।
ahodder

चित्रण का आपका उपयोग आपके तर्क से पूरी तरह मेल खाता है। मैंने पीडीपी -11 के बारे में हमेशा के लिए पढ़ा है। लेकिन यह वास्तव में पहला है जिसे मैंने कभी देखा है। धन्यवाद।
माइक ओवंस

2
कोड के अंदर, मैं एक त्रुटि कोड को संभालना चाहूंगा और मैं उतना पुराना नहीं हूं।
जेफ़ओ

@ जेफ़: आप कुछ भी कर सकते हैं त्रुटि कोड के साथ भी अपवाद के साथ किया जा सकता है, और फिर थोड़ा और। यदि आप अपवादों के साथ त्रुटि कोड की नकल करना चाहते हैं, तो आपको केवल त्रुटि कोड वापस करने के बजाय फेंकने की आवश्यकता है, और E_OK (या जो भी ठीक प्रतिक्रिया है) के खिलाफ वापसी मूल्य की तुलना करने के बजाय पकड़ लें। हालांकि निष्पक्ष होना, सी वास्तविक अपवाद नहीं है, और longjumps के रूप में सुविधाजनक नहीं हैं, इसलिए यदि आप सी कर रहे हैं, तो आप कुछ हद तक माफ कर रहे हैं।
tdammers

@ माइक: छवि पीडीपी -11 श्रृंखला पर विकिपीडिया लेख से है; अगर यह खोजना आसान नहीं है तो मुझे नहीं पता कि क्या है।
tdammers

6

आपको यह देखना चाहिए कि HTTP जैसे सामान्य प्रोटोकॉल में त्रुटि / स्थिति कोड कैसे व्यवस्थित होते हैं । वे विभिन्न प्रकार की स्थितियों / त्रुटियों के लिए अलग-अलग सीमाएँ आरक्षित करते हैं। यह उपयोगकर्ताओं को अज्ञात स्थिति कोड की पहचान करने के लिए और डेवलपर्स के लिए एक नई तरह की त्रुटि के लिए एक कोड असाइन करने के लिए आसान बनाता है जिसे पहले नहीं सौंपा गया था।


अपने जवाब में टैक्सोनॉमी चीज जोड़ें। यह चीजों को प्रबंधित करने और त्रुटियों को बनाए रखने में आसान बना देगा।
wleao

3

क्षमा करें, त्रुटि कोड का उपयोग क्यों किया जा रहा है?
अपवाद को पकड़ो, इसे लॉग इन करें और एक रिपोर्ट भेजने की पेशकश करें यदि कार्यक्रम ठीक नहीं हो सकता है

(मान लें कि आपकी भाषा अपवादों का समर्थन करती है।)

बग को ठीक करने में आपकी मदद करने वाली एकमात्र प्रासंगिक जानकारी स्टैक ट्रेस है जो आपको त्रुटि कोड के साथ नहीं मिलती है। (मैं यह भी मान रहा हूं कि आप त्रुटि रिपोर्ट के लिए त्रुटि कोड का उपयोग करना चाहते हैं और उन्हें उपयोगकर्ता के चेहरे में नहीं फेंकना चाहते हैं।)


यह बहुत सच है, और मैं ऐसा करता हूं, लेकिन मैं उपयोगकर्ताओं को क्या बताऊंगा? मुझे यकीन है कि अगर वे साथ-साथ चल रहे थे और आवेदन खत्म हो जाएगा, कोई स्पष्टीकरण या कुछ भी नहीं है, तो वे ज्वलंत होंगे।
ahodder

6
मुझे लगता है कि यहां कम से कम तीन अलग-अलग चीजें हैं जो भ्रमित हो जाती हैं। पहला कोड HTTP से जैसे सॉफ्टवेयर से सॉफ्टवेयर का उपयोग किया जाता है। दूसरे कोड हैं जो उपयोगकर्ता एक त्रुटि रिपोर्ट (जैसे कि घटना संख्या) में उपयोग कर सकते हैं। अंतिम संदेश हैं जो उपयोगकर्ता को दिखाए जा सकते हैं। यह उन्हें अलग चीजों के रूप में विचार करने में मदद कर सकता है।
Darien

2
त्रुटि कोड का उपयोग करने का एक बड़ा कारण यह है कि आप बैक एंड एप्लिकेशन का निर्माण कर रहे हैं। एक त्रुटि संदेश या स्टैक ट्रेस की तुलना में कोड की व्याख्या और प्रतिक्रिया करने के लिए क्लाइंट प्रोग्राम के लिए यह बहुत आसान और अधिक सुरुचिपूर्ण है। सभी त्रुटियाँ बग से नहीं हैं।
काइप्रो II

1
अपवाद सही पाने के लिए बहुत कठिन हैं! इसमें लिंक देखें: programmers.stackexchange.com/questions/97874/…
कोडर

@ कोडर: आपका उदाहरण अपवादों का दुरुपयोग करता है। आपको वह फेंकना चाहिए जो आप फेंकने की अपेक्षा करते हैं । अधिकांश तरीकों से एक भी अपवाद को फेंकने की उम्मीद करने की आवश्यकता नहीं है। यह पूरी तरह से प्रोग्रामर की जिम्मेदारी है कि वह तय करे कि मुझे क्या संभालना है और मैं मानता हूं कि इसे ठीक करना कठिन हो सकता है ।
Dan

2

मैं एक प्रक्रियात्मक संदर्भ (C) संभालने जा रहा हूं। यदि आपके पास ऑब्जेक्ट्स हैं तो एक त्रुटि ऑब्जेक्ट आमतौर पर बेहतर है, चाहे अपवाद हो या नहीं।

आपको प्रत्येक मॉड्यूल में स्थानीय के लिए त्रुटि कोड का उपयोग करना चाहिए। लाइब्रेरी के लिए आपके पास एक विशेष हेडर हो सकता है जिसमें त्रुटि कोड, नंबर 1, 2 आदि (या -1, -2 यदि आप चाहें तो) को सूचीबद्ध कर सकते हैं। हमेशा इनमें से किसी एक कोड को वापस करना सुनिश्चित करें, उदाहरण के लिए errnoअपने खुद के कोड में अनुवाद करें। यदि आपके पास मॉड्यूल की कई परतें हैं, तो प्रत्येक चरण पर अनुवाद करें (या गहरी त्रुटि के लिए एक सीमा पूर्वनिर्धारित करें, जैसे मान 1001 - 1050 उस अन्य मॉड्यूल से है)।

यह भी महत्वपूर्ण है कि आप एक स्ट्रिंग में कोड का अनुवाद करने के लिए एक साधन प्रदान करें। आपको कभी भी केवल कोड की सूचना नहीं देनी चाहिए, जिससे केवल निराशा होती है। वास्तव में आपके आवेदन में किसी भी कोड को एक स्ट्रिंग अनुवाद फ़ंक्शन के साथ आना चाहिए। उदाहरण के लिए libc में आमतौर पर strerrorऔर strsignal, लेकिन दुख की कमी होती है strwaitstatus


शानदार विवरण, धन्यवाद। यह वास्तव में वास्तव में मददगार है।
एएचडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.