কম্পিউটার

পাইথন টাইপ ত্রুটি:স্ট্রিং বিন্যাস করার সময় সমস্ত আর্গুমেন্ট রূপান্তরিত হয় না

পাইথন নিয়মের জন্য একটি স্টিকার। পাইথন ভাষার একটি প্রধান বৈশিষ্ট্য আপনাকে নিয়ন্ত্রণে রাখে যাতে আপনার প্রোগ্রামগুলি আপনার ইচ্ছামত কাজ করে। আপনি যখন স্ট্রিংগুলির সাথে কাজ করছেন তখন "স্ট্রিং ফর্ম্যাটিংয়ের সময় সমস্ত আর্গুমেন্ট রূপান্তরিত হয় না" বলে একটি ত্রুটির সম্মুখীন হতে পারেন৷

এই নির্দেশিকায়, আমরা এই ত্রুটি সম্পর্কে কথা বলি এবং কেন এটি পপ আপ হয়। আমরা দুটি সাধারণ পরিস্থিতির মধ্য দিয়ে চলেছি যেখানে এই ত্রুটিটি আপনার কোডে এটি সমাধান করতে সাহায্য করার জন্য উত্থাপিত হয়েছে।

আর কিছু না করে, চলুন শুরু করা যাক!

সমস্যা:typeerror:স্ট্রিং ফরম্যাটিং এর সময় সব আর্গুমেন্ট রূপান্তরিত হয় না

একটি TypeError হল এক ধরনের ত্রুটি যা আমাদের বলে যে আমরা এমন একটি কাজ করছি যা একটি নির্দিষ্ট ধরণের মানতে কার্যকর করা যায় না। এই ক্ষেত্রে, আমাদের টাইপ ত্রুটি একটি স্ট্রিং মানের সাথে সম্পর্কিত।

পাইথন অনেক উপায় অফার করে যা আপনি স্ট্রিং ফর্ম্যাট করতে পারেন। এটি আপনাকে স্ট্রিংগুলিতে মান সন্নিবেশ করতে বা স্ট্রিংয়ের শেষে মানগুলিকে সংযুক্ত করতে দেয়।

স্ট্রিং ফরম্যাট করার সবচেয়ে সাধারণ দুটি উপায় হল:

  • % অপারেটর ব্যবহার করে (পুরাতন-শৈলী)
  • .format() ফাংশনের সাথে {} অপারেটর ব্যবহার করা

আপনি যখন এই উভয় বাক্য গঠন একসাথে ব্যবহার করার চেষ্টা করেন, তখন একটি ত্রুটি উত্থাপিত হয়।

উদাহরণ:মিক্সিং স্ট্রিং ফরম্যাটিং নিয়ম

আসুন একটি প্রোগ্রাম লিখি যা একটি বেকারিতে বিক্রি হওয়া পণ্যের 5% মূল্য বৃদ্ধি গণনা করে।

81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷

গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় কাটিয়েছে।

আমরা ব্যবহারকারীর কাছ থেকে দুটি তথ্য সংগ্রহ করে শুরু করি:পণ্যের নাম এবং পণ্যের মূল্য। আমরা এটি একটি ইনপুট() স্টেটমেন্ট ব্যবহার করে করি:

নাম =ইনপুট("পণ্যের নাম লিখুন:")মূল্য =ইনপুট("পণ্যের মূল্য লিখুন:")

এর পরে, আমরা "মূল্য" এর মানকে 1.05 দ্বারা গুণ করে পণ্যের নতুন মূল্য গণনা করি। এটি 5% মূল্য বৃদ্ধির প্রতিনিধিত্ব করে:

বৃদ্ধি =রাউন্ড(ফ্লোট(দাম) * 1.05, 2)

আমরা একটি রাউন্ড() স্টেটমেন্ট ব্যবহার করে "বৃদ্ধি" এর মানকে দুই দশমিক স্থানে রাউন্ড করি। অবশেষে, কনসোলে পণ্যের নতুন মূল্য প্রিন্ট করতে স্ট্রিং ফরম্যাটিং ব্যবহার করুন:

প্রিন্ট("{} এর নতুন মূল্য হল ${}।" % নাম, str(বৃদ্ধি))

এই কোডটি আমাদের স্ট্রিং-এ "নাম" এবং "বৃদ্ধি" এর মান যোগ করে। আমরা "বৃদ্ধি" কে একটি স্ট্রিং-এ রূপান্তর করে আমাদের স্ট্রিং-এ মার্জ করি। আমরা মান রূপান্তর করার আগে, "বৃদ্ধি" হল একটি ফ্লোটিং-পয়েন্ট সংখ্যা। আমাদের কোড চালান এবং দেখুন কি হয়:

ট্রেসব্যাক (সর্বশেষ সাম্প্রতিক কল):ফাইল "main.py", লাইন 6,  প্রিন্টে("{} এর নতুন মূল্য হল {}" % নাম, str(ছাড়))টাইপ ত্রুটি:সব নয় স্ট্রিং ফরম্যাটিং চলাকালীন আর্গুমেন্ট রূপান্তরিত হয় 

মনে হচ্ছে আমাদের কোডের শেষ লাইনে একটি ত্রুটি আছে।

সমস্যা হল আমরা আমাদের স্ট্রিং ফরম্যাটিং সিনট্যাক্স মিশ্রিত করেছি। আমরা {} এবং % অপারেটর ব্যবহার করেছি৷ এই দুটি ভিন্ন ধরনের স্ট্রিং বিন্যাস জন্য ব্যবহার করা হয়.

এই সমস্যাটি সমাধান করার জন্য, আমরা আমাদের প্রোগ্রামিংয়ের শেষ লাইনটিকে কোডের নিম্নলিখিত দুটি লাইনের যেকোনো একটি দিয়ে প্রতিস্থাপন করি:

মুদ্রণ("{} এর নতুন মূল্য হল ${}।".format(নাম, str(বৃদ্ধি)))মুদ্রণ("%s এর নতুন মূল্য হল $%s।" % (নাম, str( বৃদ্ধি)))

কোডের প্রথম লাইন .format() ব্যবহার করে বাক্য গঠন. এটি {}-এর মানগুলিকে .format()-এর মানগুলির সাথে প্রতিস্থাপন করে৷ বিবৃতি তারা নির্দিষ্ট করা হয়.

কোডের দ্বিতীয় লাইন পুরানো-স্টাইল % স্ট্রিং বিন্যাস কৌশল ব্যবহার করে। "%s" মানগুলি % অপারেটরের পরে বন্ধনীতে আবদ্ধ থাকা মানগুলির সাথে প্রতিস্থাপিত হয়৷

আসুন আমাদের কোডটি আবার চালাই এবং দেখুন কি হয়:

পণ্যের নাম লিখুন:Babka পণ্যের মূল্য লিখুন:2.50 Babka এর নতুন মূল্য $2.62।

আমাদের কোড সফলভাবে আমাদের স্ট্রিং-এ আমাদের আর্গুমেন্ট যোগ করেছে।

উদাহরণ:মডুলো অপারেটরকে বিভ্রান্ত করা

Python মডুলো সংখ্যা এবং স্ট্রিং বিন্যাস গণনা করতে শতাংশ চিহ্ন (%) ব্যবহার করে। মডুলো সংখ্যা হল একটি বিভাজনের যোগফলের পরে অবশিষ্ট অবশিষ্টাংশ।

যদি আপনি একটি স্ট্রিং এর উপর শতাংশ চিহ্ন ব্যবহার করেন, এটি বিন্যাস করার জন্য ব্যবহৃত হয়; যদি আপনি একটি সংখ্যায় শতাংশ চিহ্ন ব্যবহার করেন, এটি মডিউল গণনা করতে ব্যবহৃত হয়। তাই, যদি একটি মান একটি স্ট্রিং হিসাবে ফর্ম্যাট করা হয় যার উপর আপনি একটি মডুলো গণনা করতে চান, একটি ত্রুটি উত্থাপিত হয়।

একটি প্রোগ্রাম দেখুন যা একটি সংখ্যা বিজোড় বা জোড় কিনা তা গণনা করে:

সংখ্যা =ইনপুট("অনুগ্রহ করে একটি সংখ্যা লিখুন:")mod_calc =সংখ্যা % 2if mod_calc ==0:মুদ্রণ("এই সংখ্যাটি জোড়।") অন্যথায়:মুদ্রণ("এই সংখ্যাটি বিজোড়।")

প্রথমত, আমরা ব্যবহারকারীকে একটি নম্বর লিখতে বলি। তারপরে আমরা মডুলো অপারেটর ব্যবহার করে অবশিষ্টাংশ গণনা করি যা "সংখ্যা" 2 দ্বারা ভাগ করা হলে ফেরত আসে।

যদি মডুলো অপারেটর দ্বারা রিটার্নিং মান 0 এর সমান হয়, তাহলে আমাদের if এর বিষয়বস্তু বিবৃতি কার্যকর করা। অন্যথায়, else এর বিষয়বস্তু বিবৃতি রান.

আসুন আমাদের কোড রান করি:

অনুগ্রহ করে একটি নম্বর লিখুন:7Traceback (সর্বশেষ সর্বশেষ কল):ফাইল "main.py", লাইন 2,  mod_calc =সংখ্যা % 2TypeError:স্ট্রিং ফর্ম্যাটিংয়ের সময় সমস্ত আর্গুমেন্ট রূপান্তরিত হয় না

আরেকটি প্রকার ত্রুটি। এই ত্রুটিটি উত্থাপিত হয়েছে কারণ "সংখ্যা" একটি স্ট্রিং। input() পদ্ধতি একটি স্ট্রিং প্রদান করে। আমরা যদি একটি মডুলো গণনা করতে চাই তবে আমাদের "সংখ্যা" কে ফ্লোটিং-পয়েন্ট বা পূর্ণসংখ্যাতে রূপান্তর করতে হবে।

আমরা float() ফাংশন ব্যবহার করে "সংখ্যা" কে ফ্লোটে রূপান্তর করতে পারি:

mod_calc =float(number) % 2

আসুন আবার আমাদের কোড চালানোর চেষ্টা করি:

অনুগ্রহ করে একটি সংখ্যা লিখুন:7এই সংখ্যাটি বিজোড়।

আমাদের কোড কাজ করে!

উপসংহার

পাইথন যখন স্ট্রিং ফরম্যাট অপারেশনে সমস্ত আর্গুমেন্ট যোগ করে না তখন "স্ট্রিং ফরম্যাটিংয়ের সময় সব আর্গুমেন্ট কনভার্ট করা হয় না" ত্রুটি দেখা দেয়। আপনি যদি আপনার স্ট্রিং ফর্ম্যাটিং সিনট্যাক্স মিশ্রিত করেন বা আপনি একটি স্ট্রিং এ একটি মডুলো অপারেশন করার চেষ্টা করেন তাহলে এটি ঘটে।

এখন আপনি একজন পেশাদার সফ্টওয়্যার ইঞ্জিনিয়ারের মতো এই সাধারণ পাইথন ত্রুটিটি সমাধান করতে প্রস্তুত!


  1. একটি প্রদত্ত স্ট্রিং কীওয়ার্ড কিনা তা পরীক্ষা করার জন্য পাইথন প্রোগ্রাম

  2. পাইথন প্রোগ্রাম একটি প্রদত্ত স্ট্রিং এর সমস্ত স্থানান্তর প্রিন্ট করতে

  3. একটি স্ট্রিং প্যালিনড্রোম কিনা তা পরীক্ষা করার জন্য পাইথন প্রোগ্রাম

  4. একটি বাক্য পরীক্ষা করার জন্য পাইথন প্রোগ্রাম প্যানগ্রামস কিনা।