ত্রুটিগুলির যথাযথ ব্যবহার


155

আমি যুক্তিসঙ্গতভাবে বড় প্রকল্পের জন্য টাইপস্ক্রিপ্ট ব্যবহার করছি, এবং অবাক হয়ে ভাবছি যে এর ব্যবহারের জন্য স্ট্যান্ডার্ডটি কী Error। উদাহরণস্বরূপ, বলুন আমি জাভাতে সীমানা ব্যতিক্রমের বাইরে একটি সূচি দিয়েছি:

throw new IndexOutOfBoundsException();

টাইপস্ক্রিপ্টের সমতুল্য বিবৃতিটি হ'ল:

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

আমি অন্য কোন উপায়ে এটি সম্পাদন করতে পারি? স্বীকৃত মান কী?

উত্তর:


167

কেউ এই মন্তব্যটি MDN- এ একটি লিখিত পোস্ট করেছেন, এবং আমি মনে করি এটি খুব সহায়ক হয়েছিল । এটি ত্রুটি টাইপগুলির মতো জিনিসগুলি খুব ভালভাবে বর্ণনা করে।

EvalError --- একটি ত্রুটি প্রতিনিধিত্ব করে যা বিশ্বব্যাপী ফাংশন eval () সম্পর্কিত ঘটে represent

InternalError --- একটি জাভাস্ক্রিপ্ট ইঞ্জিনের অভ্যন্তরীণ ত্রুটি নিক্ষেপ করা হয় যখন ঘটে একটি ত্রুটি প্রতিনিধিত্ব করে একটি উদাহরণ তৈরি করে। যেমন "অত্যধিক পুনরাবৃত্তি"।

রেঞ্জেরার --- একটি সংখ্যার ভেরিয়েবল বা প্যারামিটার তার বৈধ পরিসরের বাইরে থাকলে এমন একটি ত্রুটি উপস্থাপন করে এমন একটি ইভেন্ট তৈরি করে।

রেফারেন্সরিয়ার --- একটি অবৈধ রেফারেন্সকে ডি-রেফারেন্স করার সময় ঘটে এমন একটি ত্রুটি উপস্থাপন করে এমন একটি ইভেন্ট তৈরি করে।

সিনট্যাক্স এরির --- একটি সিনট্যাক্স ত্রুটি উপস্থাপন করে এমন একটি ইভেন্ট তৈরি করে যা alভাল () এ কোডটি পার্স করার সময় ঘটে।

TypeError --- একটি ত্রুটি প্রতিনিধিত্ব করে এমন একটি ইভেন্ট তৈরি করে যা ঘটে যখন ভেরিয়েবল বা পরামিতি বৈধ ধরণের না হয়।

ইউআরআইআরআর --- এনকোডুরি () বা ডিকোডিউরি ()) অবৈধ পরামিতিগুলি পাস করার সময় ঘটে এমন একটি ত্রুটি উপস্থাপন করে এমন একটি উদাহরণ তৈরি করে।


এটি অবৈধ যুক্তির জন্য আরও সাধারণ ধরণের অনুপস্থিত বলে মনে হচ্ছে । সমস্ত অবৈধ যুক্তিগুলির আওতায় পড়ে না 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
মোজিলা বিকাশকারী নেটওয়ার্কে জাভাস্ক্রিপ্ট ত্রুটির ধরণের এবং অন্যান্য তথ্যের একটি তালিকা রয়েছে: বিকাশকারী.মোজিলা.আর.ইন-
ইউএস / ডকস / ওয়েব / জাভা স্ক্রিপ্ট / রেফারেন্স /

6
@ বাশারাত আমার মনে হয় আপনার else { throw; }এখানে যোগ করা উচিত
5'9 এ নোকট করুন

43

ব্যতিক্রম ছাড়াই বার্তা নিঃসরণ ও প্রদর্শন করার সহজ সমাধান।

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

সতর্ক করা

উপরের কোনও সমাধান নয় যদি আমরা না জানি যে ব্লক থেকে কী ধরণের ত্রুটি নির্গত হতে পারে। এই জাতীয় ক্ষেত্রে প্রহরীদের ব্যবহার করা উচিত এবং যথাযথ ত্রুটির জন্য যথাযথ পরিচালনা করা উচিত - @ মরিয়ার্টি উত্তরটি দেখুন।


সুস্পষ্ট টাইপ-রূপান্তরকরণের জন্য পয়েন্টারটির জন্য ধন্যবাদ। টাইপস্ক্রিপ্ট-ডক্সে সেই তথ্যটি খুঁজে পাওয়া যায় নি এবং আজ কিছু শিখেছে।
জ্যাকলি এমমারডিউর 1

আপনি কি জানেন যে << ত্রুটি> যুক্ত করার উদ্দেশ্য কী? e.Message আমার জন্য ভাল কাজ করে।
এসব্যাটউ

1
@ এসবাটউয়ের একমাত্র উদ্দেশ্য <Error>টিএস সংকলককে বলা হচ্ছে যে eএখানে টাইপ রয়েছে <Error>যাতে আপনার (1) ইন্টেলিজেন্স এবং (2) আরও ভাল টাইপ-চেকিং থাকে। সচেতন থাকুন যদিও কোনও কাস্ট জেএসে মোটেই অনুবাদ করে না এবং খাঁটি সিনট্যাকটিক চিনি।
দিদিই

24

স্যুইচ স্টেটমেন্ট সম্পর্কে ভুলবেন না:

  • সাথে পরিচালনা নিশ্চিত করুন 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
এটা অসাধারণ; অন্যান্য উত্তরের চেয়ে আরও দৃust় এবং ক্লিনার বলে মনে হচ্ছে।
ভিক্টর জামামানিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.