ازگر کا اشارہ ٹائپ ایرر: سپر (قسم ، اعتراض): اعتراض لازمی طور پر یا قسم کا ذیلی قسم کا ہونا چاہئے

Python Prompt Typeerror



ازگر کا اشارہ ٹائپ ایرر: سپر (قسم ، اعتراض): اعتراض لازمی طور پر یا قسم کا ذیلی قسم کا ہونا چاہئے

  1. مسئلہ کو مختصر طور پر بیان کریں

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



غلطی کی وجہ معلوم کرنے کے لئے ، ٹیسٹ کوڈ بنایا گیا تھا اور غلطی کا عمل دہرایا گیا تھا۔ ماڈیول بار بار درآمد کیا گیا۔ پیڈ ماڈیول کے لئے ، ماڈیول کا نام آپی لوڈ_موڈول استعمال کرتے وقت استعمال کرنا چاہئے ، ورنہ درآمد ناکام ہوجائے گا ، لیکن بعض اوقات نام میں ترمیم کرنا ہوگی کیونکہ اسی نام کے ماڈیول ہوسکتے ہیں لیکن ڈائرکٹری میں مختلف افعال ہیں ، اگر آپ نام کے بعد درآمد شدہ ماڈیول میں ترمیم نہیں کرتے جو نام درآمد شدہ ماڈیول کو اوور رائٹ کردیں گے ، شکل 1.1 ٹیسٹ کوڈ دیکھیں۔



اب مسئلہ نام تبدیل کرنے کا ہے ، لیکن یہ پایا گیا ہے کہ درآمد کو ادلیکھت کرنے میں ابھی بھی مسئلہ ہوسکتا ہے۔ دوسری درآمد کے بعد ، پہلی کامیابی کے ساتھ تیار کردہ آبجیکٹ 'ٹائپ ایرر: سپر (قسم ، اعتراض) پھینک دے گا: اعتراض لازمی طور پر ہونا چاہئے یا قسم کی ذیلی قسم غیر معمولی ہے ، جیسا کہ شکل 1.1 ٹیسٹ کوڈ میں دکھایا گیا ہے۔



انجیر 1.1 ٹیسٹ کوڈ

  1. مسئلہ کی وجوہات

1. امپورٹ 'a' درآمد کرنے کے بعد اس کو متحرک کیا جاسکتا ہے (کیونکہ نام ایک جیسا ہی ہے)۔ دوبارہ لوڈ آپریشن ماڈیول آبجیکٹ میں ترمیم کرتا ہے۔ کسی ریفرنس کے وجود کی وجہ سے (جزوی طور پر پوشیدہ ڈیٹا ڈھانچہ ہوسکتا ہے) ، اس سے ماڈیول آبجیکٹ کے اندر موجود ڈیٹا کا 'a1' حصہ بھی متاثر ہوتا ہے؟ اس کی وجہ سے عجیب عدم انتشار پیدا ہوتا ہے۔



2. 'a' درآمد کرنے کے بعد اس کو متحرک کیا جاسکتا ہے (کیونکہ نام ایک جیسا ہی ہے)۔ دوبارہ لوڈ آپریشن ایک ماڈیول آبجیکٹ میں ردوبدل کرتا ہے ، جس کی وجہ سے پائہٹن مترجم دوبارہ لوڈ کے بعد ماڈیول کے مطابق A اور a1 دونوں ماڈیولز کی ترجمانی کرتا ہے۔ .

محض مذکورہ بیان کی تصدیق کریں۔ پروجیکٹ کی روٹ ڈائرکٹری میں ایک اور بی نامی ایک نیا فولڈر بنائیں اور اے پی پی ڈی ماڈیول رکھیں۔ ماڈیول میں ٹیسٹ کوڈ شکل 2۔1 میں دکھایا گیا ہے۔ جب یہ 16 لائنوں تک پہنچتا ہے تو یہ پروگرام غلط ہے۔ اس سے ظاہر ہوتا ہے کہ موجودہ شے کی قسم کلاس کی قسم سے مطابقت نہیں رکھتی ہے (اس بات کی نشاندہی کرتی ہے کہ موجودہ شے اس کلاس کی مثال نہیں ہے)۔ یقینا ، یہ خرابی ماڈیول بار بار درآمد کرنے کے بعد ہوتی ہے۔ حاصل کرنے کا طریقہ کال کرنے سے پہلے ، کوئی رعایت نہیں تھی ، جیسا کہ شکل 2.2 میں دکھایا گیا ہے۔

انجیر 2.1 a.pyd ماڈیول سورس فائل

انجیر 2.2 ٹیسٹ کوڈ 1

درج ذیل ٹیسٹ میں b_obj اشیاء کو کلاس a1_module.B اور re_b_obj اشیاء کو کلاس re_a_module.B کے ذریعے بنانا ہے ، اور IDs کو اندرونی طور پر پرنٹ کرنا ہے تاکہ یہ ظاہر کیا جاسکے کہ ان کے ایڈز ایک جیسے ہیں۔ یہ سب 76028552 ہیں ، جو re_a_module.B کی شناخت ہے ، اور یہ اہرت کی نشاندہی کرتا ہے جب مترجم اندرونی طور پر ترجمانی کرتا ہے تو ، یہ پہلے درآمد شدہ کلاس کو بعد میں اوورلوڈ کلاس کے طور پر بھی ترجمانی کرتا ہے ، جس کے نتیجے میں ٹائپ ایرر سپر ہوتا ہے۔ خلاصہ یہ ہے کہ ، مفروضہ 2 کی شکل میں ، شکل 2.3 دیکھیں۔

انجیر 2.3 ٹیسٹ کوڈ 2

  1. حل
    1. نقلی معاملہ

تجزیہ کے بعد ، میں سمجھتا ہوں کہ جب تک ماڈیول دوبارہ لوڈ نہیں ہوتا ہے ، اس مسئلے سے بچا جاسکتا ہے ، لہذا ماڈیول کی پہلی درآمد کے بعد ، 'ا' ماڈیول سسٹم ماڈیول کی لغت سے پاپ ہوجاتا ہے ، اور برآمد شدہ ماڈیول کو اپ ڈیٹ کیا جاتا ہے 'a1' کی کلید کے ساتھ sys. ماڈیول مندرجہ بالا دشواریوں کو حل کرسکتے ہیں۔ مثال: sys.modules.update ({'a1': sys.modules.pop ('a') figure) اعداد و شمار دیکھیں 3.1.

انجیر 3.1 تخروپن کیس حل