त्रुटियों का उचित उपयोग


155

मैं एक बड़ी परियोजना के लिए टाइपस्क्रिप्ट का उपयोग कर रहा हूं, और सोच रहा हूं कि Errorएस के उपयोग के लिए मानक क्या है । उदाहरण के लिए, कहो कि मैं जावा में अपवाद के बाहर एक सूचकांक सौंपता हूं:

throw new IndexOutOfBoundsException();

टाइपस्क्रिप्ट में समकक्ष कथन होगा:

throw new Error("Index Out of Bounds");

मैं इसे और किन तरीकों से पूरा कर सकता था? स्वीकृत मानक क्या है?

जवाबों:


167

किसी ने एक टिप्पणी में एमडीएन के लिए इस लिंक को पोस्ट किया, और मुझे लगता है कि यह बहुत मददगार था । यह ErrorTypes जैसी चीजों का बहुत अच्छी तरह से वर्णन करता है।

EvalError --- वैश्विक फ़ंक्शन eval () के बारे में होने वाली त्रुटि का प्रतिनिधित्व करने वाला एक उदाहरण बनाता है।

InternalError --- एक त्रुटि का प्रतिनिधित्व करता है, जो तब होता है जब जावास्क्रिप्ट इंजन में एक आंतरिक त्रुटि होती है। उदाहरण के लिए "बहुत अधिक पुनरावृत्ति"।

RangeError --- एक ऐसा उदाहरण बनाता है जो एक त्रुटि का प्रतिनिधित्व करता है जब एक संख्यात्मक चर या पैरामीटर इसकी मान्य सीमा के बाहर होता है।

ReferenceError --- एक त्रुटि का प्रतिनिधित्व करने वाले एक उदाहरण को बनाता है जब एक अवैध संदर्भ को संदर्भित करता है।

SyntaxError --- एक वाक्य रचना त्रुटि को दर्शाता है जो eval () में कोड पार्स करते समय होता है।

TypeError --- एक ऐसा उदाहरण बनाता है जो एक त्रुटि का प्रतिनिधित्व करता है जो तब होता है जब एक चर या पैरामीटर वैध प्रकार का नहीं होता है।

URIError --- एक ऐसी त्रुटि को दर्शाता है जो तब घटित होती है जब एनकोडराइ () या डिकोडर्इ () अमान्य पैरामीटर पारित कर दी जाती है।


यह अमान्य तर्क के लिए अधिक सामान्य प्रकार याद आ रहा है । सभी अमान्य तर्क के अंतर्गत नहीं आते हैं RangeError। क्या आपको कस्टम प्रकारों को परिभाषित करना चाहिए या बस throw new Error("<message>");?
औरदेरो

58

जावास्क्रिप्ट में सीमा से बाहर का सम्मेलन उपयोग कर रहा है RangeError। प्रकार का उपयोग करने के लिए जाँच करें कि क्या / और + instanceofसबसे जेनेरिक के लिए सबसे विशिष्ट पर शुरू

try {
    throw new RangeError();
}
catch (e){
    if(e instanceof RangeError){
        console.log('out of range');
    }
}

2
एक सामान्य त्रुटि के बारे में क्या? और / या जहां जेएस त्रुटि वर्गों में निर्मित की सूची है?
पिटोसलस

7
Mozilla डेवलपर नेटवर्क पर जावास्क्रिप्ट त्रुटि प्रकारों और अन्य जानकारी की एक सूची है: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
क्रिश्चियन डेवन

6
@ बसरत मुझे लगता है कि आपको else { throw; }यहां जोड़ना चाहिए
knocte

44

अपवाद द्वारा संदेश उत्सर्जित करने और दिखाने का सरल उपाय।

try {
  throw new TypeError("Error message");
}
catch (e){
  console.log((<Error>e).message);//conversion to Error type
}

सावधान

यदि हम नहीं जानते कि ब्लॉक से किस प्रकार की त्रुटि हो सकती है, तो उपरोक्त समाधान नहीं है। ऐसे मामलों में टाइप गार्ड्स का उपयोग किया जाना चाहिए और उचित त्रुटि के लिए उचित हैंडलिंग की जानी चाहिए - @Moriarty उत्तर पर एक नज़र डालें।


स्पष्ट प्रकार-रूपांतरण के लिए सूचक के लिए धन्यवाद। टाइपस्क्रिप्ट-डॉक्स में वह जानकारी नहीं मिली और आज कुछ सीखा।
जैकलेमेमरदेउर

क्या आप जानते हैं कि <Error> जोड़ने का उद्देश्य क्या है? e.message मेरे लिए ठीक काम करता है।
sbattou

1
@sbattou का एकमात्र उद्देश्य <Error>TS संकलक को बता रहा है कि eयहाँ प्रकार है <Error>ताकि आपके पास (1) अंतर्मुखी और (2) बेहतर प्रकार की जाँच हो। हालांकि यह जान लें कि कोई भी कास्ट JS को बिल्कुल भी ट्रांसलेट नहीं करता है और पूरी तरह से सिन्सेटिक शुगर है।
दीदी

25

स्विच स्टेटमेंट के बारे में न भूलें:

  • के साथ संभाल सुनिश्चित करें default
  • instanceof सुपरक्लास पर मैच कर सकते हैं।
  • ES6 constructorसटीक वर्ग पर मेल करेगा।
  • पढ़ने में आसान।

function handleError() {
    try {
        throw new RangeError();
    }
    catch (e) {
        switch (e.constructor) {
            case Error:      return console.log('generic');
            case RangeError: return console.log('range');
            default:         return console.log('unknown');
        }
    }
}

handleError();


3
यह भी खूब रही; अन्य उत्तरों की तुलना में अधिक मजबूत और साफ-सुथरा लगता है।
विक्टर ज़मानियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.