 اس موڈیول کے اندر ہم دسکس کریں گے کہ ایررز اور اکسپشنز جو ہے ان کے بیچ میں کیا دفرنس ہے اکسپشنز کیوں سپیریر ہے ایررز ہے یا کس صورت کے اندر ہم ایک ایرر اکسپیکٹ کریں اور کس صورت کے اندر ہم اکسپشنز کو کیاچ کرنا یا اکسپشنز کو اکر ہونا جو ہے وہ اکسپیکٹ کریں. تو اگر سمپلی دیکھا جائے تو ہم اس طرح سے بھی اس چیز کو ویو کر سکتے ہیں کہ جو ایررز کی اکرنس ہوتی ہے وہ عام طور پہ اکسپیکٹٹٹ ہوتی ہے وہ آپ کو پتا ہوتا ہے کہ کس spot کے اوپر ایرر اکر ہونا ہے جس کو کہ ہم کہہ سکتے ہیں کہ سنکرونس ہے کہ ہم نے ایک فنکشن کال کیا اور ہمیں پتا ہے اس فنکشن کے رزالت میں کسی کیسم کا ایرر آسکتا ہے. For example آپ ایک فائل کو کرییٹ کرتے ہیں اور فائل کرییٹ نہیں ہوتی تو آپ کو پتا ہے کہ جی فائل کرییٹشن کے رزالت میں کوئی ایرر بھی اکر ہو سکتا. تو یہ ایک سپونٹینیس چیز ہے یہ ایک سنکرونس چیز ہے آپ کو اکسپیکٹٹ تھا کہ یہاں پہ ایرر کی اکرنے کے چانسز ہیں. تو ایسے کس کے اندر ہم یہ جو فائل کو اوپن کرنے کے لیے جو ایرر اکر ہوا ہے اس کے لیے آپ نے ایک فنکشن دیکھا تھا report ایرر. report ایرر کے فنکشن کو ہم عام طور پر use کرتے ہیں اور report ایرر کا فنکشن کیا کرتا ہے کہ اگر کوئی فائل کسم کا ایرر ہوتا ہے تو وہاں سے پوکرام کو بس اسی طرح سے اکزٹ کر دیتا ہے. پورے کا پورا پوکرام جو ہے وہ ختم ہو جاتا ہے. جبکہ جو اکسپشنز ہیں وہ تھوڑی سی different ہے. اکسپشنز کیا ہے اکسپشنز کہیں بھی بھی اکر ہو سکتی ہیں. کوئی بھی آپ ایک اوپریشن پرفوم کرتے ہیں اس کے رزالت میں اکسپشنہ کرو سکتی ہے. تو for example آپ نے ایک pointر سے میمری کو read کیا اکسپشنہ کرو سکتی ہے. میمری کو write کیا اکسپشنہ کرو سکتی ہے. آپ نے کوئی اراثمیٹیکیا لوجیکل اوپریشن پرفوم کیا اکسپشنہ کرو سکتی ہے. آپ نے کسی ایک میمری سپیس کو access کیا ہے یا آپ نے کسی ایک پوکرام ایریہ کو access کیا ہے تو اکسپشنہ کرو سکتی ہے. تو بیشمار ریزنز ہیں اکسپشنز کیا کرو لیں. تو ہم کہا سکتے ہیں کہ اکسپشنز کا اکر ہونا جو ہے اس کا بھیویر ہے وہ تھوڑا asynchronous نیچر کا وہ کبھی بھی کہیں پہ بھی کسی بھی وجہ سے اکسپشن اکرو سکتی ہے. کچھ کسی اس کے اندر ہمیں یہ دستنکوش کرنا مشکل ہو جاتا ہے کہ یہ ایرر ہے یا یہ کوئی اکسپشن ہے. for example کیا ایسے function ہیں جس طرح ہم نے بات کیا ہے کہ جی فائل کو اپن کرنے کے لیے function ہے اور اگر فائل سیترا اپنی ہوتی تو ایرر ہے کرو. لیکن اور کچھ ایسے function ہے اگر ہم ان function کو call کرتے ہیں تو اس کیس میں windows exception بھی تھرو کرتی ہے جس طرح ایک function ہے heap allocation کا. heap alloc کا جو function ہے اس کے through ہم heap allocate کرتے ہیں تو اگر کسی وجہ سے وہ allocate نہ تو اس کیس میں windows exception تھرو کرتی ہے. تو یہ ایک اس کا synchronousہ behavior ہے تو جو boundary ہے between exception and ایرر وہ اتنی کوئی well defined نہیں ہے کبھی کبھی آپ کو لگے گا کہ اس کے result میں ایرر آنا چاہی تھا لیکن آپ کو exception مجھا جاتی ہے. اس کے علاوہ exception جو ہیں وہ آپ کے program کو مزید robust بنہا ستی ہیں. یعنی کہ آپ exceptions کو catch کرنے کا ہمارے پاس ایک structure تریکہ ہے. اور اس structure تریکہ کہ ہم اس پرپس کے لی بھی use کر سکتے ہیں کہ ہم program کو کوشش کریں کہ وہ exception سے جو بھی ایرر آیا اس سے recover کریں اور اپنی execution کو آگے continue کریں. جبکہ ایرر کے کس میں عام طور پہاں آپ کیا کرتے ہیں کہ ایرر کے کس میں آپ پورے کے program کو دلیٹ کر دیتے ہیں اس کو destroy کر دیتے ہیں. اور وہاں پہ سب کچھ execution جو ہے وہ رکھ جاتی ہے. تو exceptions in errors کو پکرنے کے لیے ہم کہہ سکتے ہیں یا in operations کے result میں جو unexpected چیزیں اکر ہو رہی ہیں ان کو catch کرنے کے لیے ہمارے پاس ایک structured تکنیک. پھر یہاں پہ ہم ایک اور چیز بھی دیکھتے ہیں کہ جب کوئی error اکر ہوتا, error کے result میں ہم کیا کرتے ہیں کہ پورے پورے program کو exit کر جاتے ہیں program ختم ہو جاتا ہے. لیکن ہم یہ نہیں سوچتے ہیں کہ کئی سارے ایسے حنڈلز ہیں جو کے open تھے. خور example آپ نے کچھ files open کیمی ہیں کوئی temporary files ہیں وہ open کیمی ہیں. اور error آیا آپ نے سب کچھ کلوز کر دیا program کو exit کر دیا. اب وہ جو حنڈلز open ہوئے تھے تھا. کوئی اور resources ہیں جو کے open تھے ان کا کیا ہوگا. تو ہم error case میں ان چیزوں کا حنڈل نہیں کرے ہیں کہ جو ہمارے پاس ایک ایسے resources ہیں جن کو کہ ہمیں release کرنے کی ضرورت ہے garbage collection کرنے کی ضرورت ہے ہم ان کی garbage collection نہیں کرتے ہم سیر سیدہ program کو terminate کرتے ہیں. صحیح تریقہ یہ ہوگا کہ ہم اچھے تریقہ سے garbage collection کریں ان resources کو release کریں اور end میں ہم پھر program کو terminate کرتے ہیں. تو exceptions جو ہیں وہ یہ کام کرنے کے لیے آپ کو ایک structured method پروائیٹ کر رہی ہیں. کہ آپ اگر کسی وجہ سے کوئی fatal error آئیتا ہے کوئی exception آئیتی ہے. تو آپ کے پاس chance ہوتا ہے کہ آپ جو اپنے resources جن کو کہ آپ نے allocate کیا ہوئے جو آپ کے پاس حنڈلز available ہیں allocated ہیں ان کو release کر سکیں جو garbage collection کرنے ہیں وہ garbage collection کر سکیں اور صحیح تریقہ سے program کو exit کر سکیں. تو یہ آپ کو exception جو ہیں اس چیز کا موقع پروائیٹ کرتے ہیں اور کئی کسم کی ایسے resources ہیں for example آپ نے کوئی memory allocation کی ہے آپ نے کسی ایک resource کا کوئی handle open کی ہے آپ نے کوئی temporary file open کی ہے آپ نے کوئی vessel file open کی ہی ہے کوئی synchronization construct ہے جیسے sama force ہے یا spin locks ہیں ان کو آپ use کریں تو وہ جو synchronization construct ہیں ان کو تو صحیح تریقہ سے release کرنا بڑا ضروری ہے. other wise کئی کسم کی problems ہیں جو اکر ہو سکتے ہیں. تو ہم ان problems کو handle کرنا چاہتے ہیں کہ ہمیں یہ problems اکرنا ہوا ہم ان resources کو release کریں program کو ختم کرنے سے پہلے. تو exception handling کی طرح ہم یہ operation صحیح تریقے سے perform کر سکتے ہیں اس کے لعوہ exceptions آپ کو ایک اور چیز بروائیٹ کرتے ہیں کہ اگر مختلف کسم کی cases ہیں مختلف کسم کی errors ہیں تو آپ کے program کے اندر کوئی logical even کوئی error آ کر ہو رہے ہیں تو ان logical errors کیلئے یا مختلف کسم کی errors کیلئے ہے program اپنی user defined exceptions جو ہے ان کو generate کر سکتا ہے اور ان کو more structured تریقے سے process کر سکتا ہے اور پھر اس طرح کی exceptions کی case میں ایک اور چیز بھی possible ہے کہ programmer چاہے کہ وہ آپ کا program exception اکر ہونے کے بعد اس کو کیوں کے پتہ یہ in fact اسی error کی result میں exception اکر ہوئی ہے تو exception اکر ہونے کے بعد واپس کوشش کرے کہ program اپنی execution continue کر سکے exception میں ہم نے دیکھا ہے یہ چیز possible ہے کہ آپ چاہے تو exception except والے part کے اندر program کو continue بھی کروا سکتا ہے تو programر یہ بھی کر سکتا ہے کہ error آیا اور error آنے کے بعد وہ program کو continue بھی کروا سکتا ہے in case of programmer defined exceptions لیکن اس طرح کی cases ہوتے ہیں وہ تھوڑے سے convoluted ہوتے ہیں اس کے اس میں programmer کو پتہ ہونا چاہے کہ جی وہ exactly کیا چیز desire کر رہا ہے اگر وہ صحیطری کیسے نہیں کرا کیوںکہ exceptions کی case میں یہ چیز اتنی recommended نہیں ہے کہ آپ program کو continue کرائیں کیونکہ exception عام طور پہ کسی error کی وجہ سے اکر ہوتی اور وہ کوئی ایسی error ہوتے جس کے بعد program اگر continue کرے گا تو آپ کو unexpected results دے گا