বইটির মূল যুক্তিটি হ'ল কোডটির ব্যতিক্রম সংস্করণটি আরও ভাল কারণ এটি যদি আপনি নিজের ত্রুটি পরীক্ষা করে লেখার চেষ্টা করেন তবে আপনি যা উপেক্ষা করতে পারেন সেটিকে এটি ধরা দেবে।
আমি মনে করি এই বিবৃতিটি কেবল খুব নির্দিষ্ট পরিস্থিতিতেই সত্য - যেখানে আউটপুটটি সঠিক কিনা সেদিকে আপনি খেয়াল রাখেন না।
কোনও সন্দেহ নেই যে ব্যতিক্রম উত্থাপন একটি যথাযথ এবং নিরাপদ অনুশীলন। আপনি যখনই মনে করেন যে প্রোগ্রামের বর্তমান অবস্থায় এমন কিছু আছে যা আপনি (বিকাশকারী হিসাবে) মোকাবেলা করতে পারেন না বা করতে চান না তখনই আপনার উচিত।
আপনার উদাহরণটি অবশ্য ব্যতিক্রম ধরা । যদি আপনি কোনও ব্যতিক্রম ধরা পড়ে তবে আপনি যে পরিস্থিতিগুলি উপেক্ষা করেছেন সেগুলি থেকে আপনি নিজেকে রক্ষা করছেন না । আপনি একেবারে বিপরীত কাজটি করছেন: আপনি ধরে নিয়েছেন যে এই ধরণের ব্যতিক্রম ঘটতে পারে এমন কোনও দৃশ্য আপনি উপেক্ষা করেন নি, এবং তাই আপনি আত্মবিশ্বাসী যে এটি ধরার পক্ষে ঠিক আছে (এবং এইভাবে প্রোগ্রামটি প্রস্থান হতে বাধা দেয়, কোনও অপ্রকাশিত ব্যতিক্রম হিসাবে)।
ব্যতিক্রম পদ্ধতির ব্যবহার করে, যদি আপনি ValueError
ব্যতিক্রম দেখতে পান তবে আপনি একটি লাইন এড়িয়ে যান। Theতিহ্যবাহী অ-ব্যতিক্রম পদ্ধতির ব্যবহার করে আপনি যেগুলি থেকে split
প্রত্যাশিত মানগুলি গণনা করেন এবং এটি যদি 2 এরও কম হয় তবে আপনি একটি লাইন এড়িয়ে যাবেন। আপনার traditionalতিহ্যগত ত্রুটি চেকের ক্ষেত্রে আপনি অন্য কিছু "ত্রুটি" পরিস্থিতি ভুলে থাকতে পারেন, এবং except ValueError
আপনার জন্য এগুলি ধরতে পারছেন, তবে কি আপনাকে এই ব্যতিক্রম পদ্ধতির সাথে আরও সুরক্ষিত বোধ করা উচিত ?
এটি আপনার প্রোগ্রামের প্রকৃতির উপর নির্ভর করে।
আপনি যদি লিখছেন, উদাহরণস্বরূপ, একটি ওয়েব ব্রাউজার বা একটি ভিডিও প্লেয়ার, ইনপুটগুলির সাথে কোনও সমস্যা না থাকলে এটি কোনও অযোগ্য ব্যতিক্রম নিয়ে ক্র্যাশ হওয়ার কারণ হবে না। রিমোটলি বুদ্ধিমান কিছু আউটপুট দেওয়া ছাড়ার চেয়ে ভাল (এমনকি যদি কঠোরভাবে বলা যায় তবে ভুল) আউটপুট দেওয়া আরও ভাল।
আপনি যদি এমন কোনও অ্যাপ্লিকেশন লিখছেন যেখানে নির্ভুলতার বিষয়টি (যেমন ব্যবসা বা ইঞ্জিনিয়ারিং সফ্টওয়্যার), এটি একটি ভয়াবহ পদ্ধতির হবে। যদি আপনি উত্থাপিত কিছু দৃশ্যের কথা ভুলে যান তবে আপনি যা ValueError
করতে পারেন তার মধ্যে সবচেয়ে খারাপ কাজটি হ'ল চুপচাপ এই অজানা দৃশ্যটিকে উপেক্ষা করা এবং লাইনটি এড়িয়ে যাওয়া। এটি খুব সূক্ষ্ম এবং ব্যয়বহুল বাগ সফ্টওয়্যারটিতে শেষ হয়।
আপনি মনে করতে পারেন যে এই কোডটিতে আপনি দেখতে পাচ্ছেন এমন একমাত্র উপায় ValueError
হ'ল যদি split
কেবল একটি মান দেওয়া হয় (দুটি পরিবর্তে)। তবে যদি আপনার print
বক্তব্যটি পরে এমন কোনও অভিব্যক্তি ব্যবহার শুরু করে যা ValueError
কিছু শর্তে উত্থাপিত হয়? এটি আপনাকে কিছু রেখাগুলি এড়িয়ে যেতে বাধ্য করবে কারণ তারা মিস করে না :
, তবে সেগুলিতে print
ব্যর্থ হয়। এটি একটি সূক্ষ্ম বাগের উদাহরণ যা আমি আগে উল্লেখ করছি - আপনি কিছুই লক্ষ্য করবেন না, কেবল কিছু লাইন হারাবেন।
আমার সুপারিশ হ'ল কোডটি ব্যতিক্রম ধরা (তবে উত্থাপন নয়!) এড়ানো যেখানে ভুল আউটপুট উত্পাদন করা প্রস্থান করার চেয়ে খারাপ। আমি যখন সত্যই তুচ্ছ প্রকাশ পাই তখনই এই জাতীয় কোডটিতে আমি কেবল ব্যতিক্রম ধরি, তাই আমি সহজেই যুক্তি দিতে পারি যে সম্ভাব্য ব্যতিক্রমগুলির প্রত্যেকটির কারণ হতে পারে।
ব্যতিক্রমগুলি ব্যবহারের পারফরম্যান্সের প্রভাব হিসাবে, ব্যতিক্রমগুলি ঘন ঘন সম্মুখীন না হলে এটি তুচ্ছ (পাইথনে) in
আপনি যদি নিয়মিতভাবে ঘটে যাওয়া শর্তগুলি পরিচালনা করতে ব্যতিক্রমগুলি ব্যবহার করেন তবে আপনি কিছু ক্ষেত্রে বিশাল কর্মক্ষমতা ব্যয় করতে পারেন। উদাহরণস্বরূপ, ধরুন আপনি দূরবর্তীভাবে কিছু কমান্ড কার্যকর করেছেন। আপনি পরীক্ষা করতে পারেন যে আপনার কমান্ড পাঠ্য কমপক্ষে সর্বনিম্ন বৈধতা (যেমন, সিনট্যাক্স) পাস করেছে passes অথবা আপনি কোনও ব্যতিক্রম উত্থাপিত হওয়ার জন্য অপেক্ষা করতে পারেন (যা কেবলমাত্র দূরবর্তী সার্ভারটি আপনার আদেশটি পার্স করার পরে এবং এটিতে কোনও সমস্যা খুঁজে পাওয়ার পরে ঘটে)। স্পষ্টতই, পূর্ববর্তীটি দ্রুততরতার আদেশ। আর একটি সাধারণ উদাহরণ: আপনি বিভাগটি কার্যকর করার চেষ্টা করার চেয়ে কোনও সংখ্যা শূন্য ~ 10 গুণ দ্রুত কিনা তা পরীক্ষা করতে পারেন এবং তারপরে জিরো ডিভিশনইরির ব্যতিক্রম ধরা।
আপনি যদি প্রায়শই দূরবর্তী সার্ভারগুলিতে ত্রুটিযুক্ত কমান্ড স্ট্রিংগুলি প্রেরণ করেন বা শূন্য-মূল্যবান তর্কগুলি আপনি বিভাগের জন্য ব্যবহার করেন তবে এই বিবেচনাগুলি কেবল ততটাই গুরুত্বপূর্ণ।
দ্রষ্টব্য: আমি ধরে নিয়েছি আপনি ন্যায়বিচারের except ValueError
পরিবর্তে ব্যবহার করবেন except
; অন্যরা যেমন উল্লেখ করেছে, এবং বইটি যেমন কয়েকটি পৃষ্ঠায় বলেছে, আপনার কখনই খালি ব্যবহার করা উচিত নয় except
।
অন্য দ্রষ্টব্য: যথাযথ অ-ব্যতিক্রম পদ্ধতির split
সন্ধান না করে প্রত্যাবর্তিত মানগুলির সংখ্যা গণনা করা :
। যেহেতু এটি কাজ দ্বারা সম্পন্ন পুনরাবৃত্তি পরেরটির, পর্যন্ত খুব ধীর split
ও মে প্রায় ডবল সঞ্চালনের সময়।