پائہٹن لاگ میں اسٹیک ٹریس پرنٹ کریں۔

Pay N Lag My As Yk Rys Prn Kry



کسی خاص لمحے میں اپروچ کالز کا مجموعہ اسٹیک ٹریس میں دکھایا جاتا ہے۔ جب کوئی پروگرام استثناء کو بڑھاتا ہے، تو ازگر ایک اسٹیک ٹریس تیار کرتا ہے، جسے ٹریس بیک یا بیک ٹریس بھی کہا جاتا ہے۔ اس اسٹیک ٹریس میں مختلف قسم کی تفصیل ہے جس سے اس مسئلے کا پتہ لگانے کے لیے فائدہ اٹھایا جا سکتا ہے۔ Python لاگنگ پیکج کئی بنیادی خصوصیات کے ساتھ آتا ہے اور اس میں لاگنگ کی متعدد سطحیں ہیں جن میں 'ڈیبگ'، 'معلومات'، 'انتباہ'، 'خرابی'، اور 'تنقیدی' شامل ہیں۔

مثال 1: ٹریس بیک ماڈیول کا استعمال کرکے ازگر میں اسٹیک ٹریس پرنٹ کریں۔

اس مثال میں، ہم اسٹیک ٹریس کو پرنٹ کرنے کے لیے Python کے ٹریس بیک ماڈیول کو لاگو کرنے کا طریقہ دکھانے کے لیے کوڈ کا ایک سادہ حصہ استعمال کریں گے۔ اس ٹریک بیک پیکج میں کمپیوٹر کی زبانوں سے اسٹیک ٹریس کو اکٹھا کرنے، ذخیرہ کرنے اور اس کی نمائش کرنے کے لیے ایک اچھی خاصیت شامل ہے۔ یہ ایمانداری سے اسکرپٹ کے اسٹیک ٹریس پرنٹنگ آپریشنز کو نقل کرتا ہے۔ اگر آپ کو کبھی بھی اسٹیک ٹریس دیکھنے کی ضرورت ہو تو یہ ضروری ہے۔

دوسرے لفظوں میں، ایک اسٹیک ٹریس ہر آپریشن کو دکھاتا ہے جو اس سے پہلے آیا تھا جس کے نتیجے میں مسئلہ ہوا تھا۔ سب سے اہم معلومات ہمیشہ اسٹیک ٹریس کی آخری لائن پر رپورٹ کی جاتی ہے، جو اس وقت ہوتی ہے جب غلطی کی نشاندہی کی جاتی ہے۔ نتیجے میں آنے والی تمام فنکشن کالز کو فوری طور پر تلاش کرنے اور مسئلے کو حل کرنے کے لیے استعمال کیا جا سکتا ہے۔







آئیے ٹریس بیک پائتھون لائبریری کو درآمد کرکے کوڈ کو لاگو کرکے شروع کریں۔ پھر، درج ذیل لائن میں، ہم ایک صف بناتے ہیں اور کچھ قدروں کے ساتھ عناصر کی فہرست بناتے ہیں۔ صف کی فہرست کی قدریں '7'، '8'، '9' اور '10' ہیں۔ صف کی فہرست میں چار قدریں ہیں۔ اس صف کی فہرست کو پہلے سے شروع کردہ متغیر 'A' میں محفوظ کیا گیا تھا۔



اس کے بعد، ہم درج ذیل سطر میں اصطلاح 'کوشش' اور قدر 'A=6' استعمال کرتے ہیں۔ ہم مستثنیات کو منظم کرنے کے لیے ازگر میں بلاکس کو چھوڑ کر ٹرائی کا استعمال کرتے ہیں۔ اس انداز کو اسکرپٹ لکھنے کے لیے استعمال کیا جاتا ہے جو بلاک ہیڈر میں خرابی پیدا کر سکتا ہے۔ مستثنیات بنیادی طور پر غلطیاں ہیں، نحو کی غلطیوں کی طرح۔ کسی پروگرام کے استثناء کے دوران، استثنیٰ ہینڈلنگ استثناء کا جواب دینے کا منفرد عمل ہے۔ اسکرپٹ پر واپس آتے ہوئے، ہم اگلی لائن میں 'سوائے' استعمال کرتے ہیں۔



سوائے بلاک میں، ہم 'traceback.print exc()' استعمال کرتے ہیں جو 'پرنٹنگ استثنا' کے لیے مختصر ہے۔ ہم استثناء کے خانے کے اندر 'پرنٹ()' فنکشن استعمال کرتے ہیں جو کہ 'پروگرام اینڈ' ہے تاکہ استثناء پیدا ہونے پر یہ بیان پرنٹ ہوجائے۔ اب، اگر ٹرائی باکس میں کوئی استثناء ہوتا ہے، تو پروگرام فوراً سوائے بلاکس میں چلا جاتا ہے اور جاری رہتا ہے۔ اگر کوئی استثناء واقع نہیں ہوتا ہے تو، استثنائی بلاک کو مکمل طور پر چھوڑ دیا جاتا ہے۔ اب جب کہ استثناء ہوتا ہے، ہم کوڈ میں دیکھ سکتے ہیں کہ '6' قدر کو آزمانے والے باکس میں داخل کیا گیا تھا حالانکہ یہ صف کی فہرست میں نہیں ہے۔ نتیجے کے طور پر، کوڈ فوری طور پر استثناء کے خانے میں جاتا ہے اور آؤٹ پٹ ڈسپلے میں 'پروگرام کے اختتام' کا بیان پرنٹ کرتا ہے۔





ٹریس بیک بنانے والی مختلف فنکشن کالز کو سب سے حالیہ سے کم از کم حالیہ، نیچے سے اوپر تک آرڈر کیا جاتا ہے۔ ان تمام کارروائیوں کی نمائندگی دو سطری بیانات سے ہوتی ہے۔ ہر کال فائل کے نام، ترتیب نمبر، اور ماڈیول کے نام سے شروع ہوتی ہے، یہ سبھی کوڈ کے مقام کی نشاندہی کرتے ہیں۔ اس کے بعد، یہ استثنائی پرنٹ اسٹیٹمنٹ 'پروگرام کا اختتام' دکھاتا ہے کیونکہ قدر '6' اعلان کردہ فہرست میں نہیں تھی، جس کے نتیجے میں 'لسٹ انڈیکس رینج سے باہر' آؤٹ پٹ ہوتا ہے۔



مثال 2: Logging.Exception() طریقہ استعمال کرکے Python میں Stacktrace پرنٹ کریں

اس مثال میں، ہم یہ ظاہر کریں گے کہ اسٹیک ٹریس کو آؤٹ پٹ کرنے کے لیے Python کا 'logging.exception()' طریقہ کیسے استعمال کیا جائے۔ Python میں لاگنگ پیکج ہمیں غلطیوں کو لاگ کرنے کے ساتھ ساتھ غلطیوں اور استثناء کو ریکارڈ کرنے دیتا ہے۔ لاگنگ ماڈیولز ہمیں لاگنگ ماڈیولز کا انتخاب فراہم کرتے ہیں جن میں 'ڈیبگ'، 'معلومات'، 'انتباہ'، 'خرابی'، اور 'تنقیدی' شامل ہیں۔ یہ بنیادی طور پر لاگنگ ماڈیولز کی پرتیں ہیں، سادہ الفاظ میں۔ Python میں غلطی کے ساتھ استثناء کو لاگ کرنے کے لیے، 'logging.exception()' فنکشن استعمال کریں۔ یہ فنکشن اس لاگر میں ERROR اسٹیٹس کے ساتھ ایک رپورٹ شامل کرتا ہے۔ یہ خیال کیا جاتا ہے کہ پیرامیٹرز ڈیبگنگ کے لیے ہیں۔ استثنیٰ کے بارے میں معلومات لاگنگ رپورٹ کے ساتھ منسلک ہے۔ واحد جگہ جہاں سے اس طریقہ کار کو استعمال کرنا ہے وہ مستثنیٰ ہینڈلر ہونا چاہیے۔

اب، آئیے کوڈ کو دیکھیں۔ سب سے پہلے، ہم دو لائبریریاں درآمد کرتے ہیں - جن میں سے پہلی لاگنگ اور دوسری ٹریس بیک ہے۔ پھر، ہم 'لاگنگ' کے ساتھ 'basicConfig' طریقہ استعمال کرتے ہیں اور سطح کو 'logging.Debug' کے طور پر بیان کرتے ہیں۔ واحد دلیل جو 'getLogger()' طریقہ لیتا ہے وہ ہے 'نام'۔ اس طرح، ہم اسے 'logging.getlogger' فنکشن استعمال کرتے وقت استعمال کرتے ہیں۔ اگر کوئی نام دیا جاتا ہے، تو اس نام کے ساتھ لاگر مثال کا حوالہ تیار کیا جاتا ہے۔ دوسری صورت میں، جڑ واپس آ جاتا ہے. ایک ہی لاگر آبجیکٹ کا حوالہ ایک ہی شناخت کے ساتھ بہت سے getLogger() آپریشنز کے ذریعے دیا جاتا ہے۔

پھر، ہم کوشش کرنے کے لیے استعمال کرتے ہیں، اور جیسا کہ ہم ٹرائی بلاک میں جانتے ہیں، ہم وہ کوڈ لکھتے ہیں جو ایک استثناء کو بڑھا سکتا ہے۔ اس صورت میں، ہم 'myfunction()' استعمال کرتے ہیں۔ اگر دی گئی صورت حال مماثل نہیں ہے تو، ایک استثناء واقع ہوتا ہے. پھر، کوڈ فوری طور پر سوائے بلاک پر چھلانگ لگا دیتا ہے۔ اس استثنائی بلاگ میں، ہم 'logging.info' استعمال کرتے ہیں۔ اس کے اندر، ہم وہ پیغام لکھتے ہیں جسے ہم پرنٹ کرنا چاہتے ہیں جو کہ 'استثنیٰ واقع ہوا' ہے۔ اس کی وجہ یہ ہے کہ اگر کوئی استثنیٰ ہوتا ہے، ایک غلطی ہوتی ہے تو یہ اس پیغام کو اسکرین پر دکھاتا ہے۔ لیکن اگر خرابی واقع نہیں ہوتی ہے، تو یہ پورے استثنائی پیغام کو نظر انداز کر دیتا ہے۔

ہم نے میسج کے ساتھ 'exc info=True' بھی سیٹ کیا۔ مکمل اسٹیک ٹریس لاگنگ میں شامل ہو جائے گا جب exc معلومات کو True پر سیٹ کیا جائے گا، جیسا کہ 'logger.exception()' کے ساتھ ہوتا ہے۔ فرق صرف یہ ہے کہ آپ لاگ کی سطح کو غلطی سے کسی اور چیز میں صرف لاگر کو تبدیل کر کے فوری طور پر تبدیل کر سکتے ہیں۔

اب جب کہ اسکرپٹ میں ایک استثناء واقع ہوا ہے، آؤٹ پٹ کی پہلی لائن 'استثنیٰ کی جگہ' پیغام ہے جس کے بعد لاگنگ لیول ہے جو اسکرپٹ میں استعمال کیا گیا تھا جو کہ 'معلومات' ہے۔ اس معاملے میں لاگر کا نام جڑ کے طور پر ظاہر ہوتا ہے۔ اس کے بعد، ٹریس بیک کال ظاہر ہوتی ہے، ماڈیول، لائن، اور فائل کے نام دکھاتی ہے۔ آخر میں، غلطی کا پیغام 'myfunction' کی وضاحت نہیں کی گئی ہے۔

آئیے کچھ اور کوڈ کے بارے میں بات کرتے ہیں جو لاگنگ کا استعمال کرتا ہے۔ استثناء() طریقہ لاگنگ کے لیے لائبریری کو درآمد کرکے شروع ہوتا ہے۔ اس کے بعد، دو متغیرات - 'm' اور 'n' - کو شروع کیا جاتا ہے اور بالترتیب '7' اور '0' کی قدریں دی جاتی ہیں۔ ٹرائی بلاک اب اگلے مرحلے میں استعمال ہوتا ہے۔ اس کے اندر، ہم وہ کوڈ لکھتے ہیں جو استثناء کا سبب بن سکتا ہے۔ سب سے پہلے، ہم متغیر 'o' کا اعلان کرتے ہیں۔ پھر، ہم نے اس 'm' کو 'n' سے تقسیم کیا۔ یہ ایک استثناء کا سبب بنتا ہے کیونکہ ڈینومینیٹر صفر ہے اور ہم کسی نمبر کو صفر سے تقسیم نہیں کر سکتے، جس کا مطلب ہے کہ غلطیاں پیدا ہوں گی۔ نتیجے کے طور پر، کوڈ سوائے بلاک پر چھلانگ لگاتا ہے جہاں 'logging.error' استعمال ہوتا ہے۔ غلطی لاگنگ کی سطح ہے۔ اگر کوئی استثنا ہوتا ہے، تو ہم ایک پیغام یا بیان پرنٹ کرتے ہیں جو کہتا ہے، 'استثنیٰ واقع ہوا' اور ہم 'exc info=true' سیٹ کرتے ہیں۔ اگر ہم اسے درست پر سیٹ نہیں کرتے ہیں، تو یہ صرف استثنائی بلاک کو پرنٹ کرتا ہے اور ٹریس بیک کی معلومات کو ظاہر نہیں کرتا ہے۔

چونکہ ہم نے اپنی اسکرپٹ میں 'خرابی' کی سطح کا انتخاب کیا ہے، یہ پہلے لاگر کے نام کے طور پر جڑ کو ظاہر کرتا ہے، اس کے بعد 'استثنیٰ واقع ہوا' پیغام آتا ہے۔ ٹریس بیک کی معلومات جس میں فائل کا نام، لائن نمبر، اور ماڈیول شامل ہے پھر دکھایا جاتا ہے۔ اگلی لائن پھر غلطی کا نوٹس دکھاتی ہے کیونکہ ڈینومینیٹر صفر نہیں ہو سکتا۔ اور چونکہ اس کوڈ میں ڈینومینیٹر صفر ہے، اس لیے غلطی کو صفر تقسیم کرنے والی غلطی کہا جاتا ہے۔

نتیجہ

اس آرٹیکل میں، ہم نے پائتھون لاگ میں اسٹیک ٹریس پرنٹ کرنے کے عمل کے ساتھ ساتھ اسٹیک ٹریس بنانے کے لیے ٹریس بیک ماڈیول کا استعمال کرنے کا طریقہ بھی دیکھا۔ پہلی مثال میں، ٹریس بیک لائبریری کو درآمد کیا گیا تھا اور کوشش اور سوائے طریقے استعمال کیے گئے تھے۔ کوڈ ٹرائی باکس میں لکھا گیا تھا۔ اگر کوئی استثناء واقع ہوتا ہے، تو یہ تیزی سے استثنائی بلاک کی طرف جاتا ہے اور اسکرین پر استثناء کا بیان دکھاتا ہے۔ دوسری مثال میں، ہم نے لاگنگ کا استعمال کیا جو پہلی مثال سے ملتا جلتا ہے۔ استثناء () طریقہ لاگنگ کی 'معلومات' اور 'خرابی' کی سطحوں کا استعمال کرتا ہے۔ اگر کوئی استثناء ہوتا ہے، تو یہ ایک استثنائی بیان دکھاتا ہے۔