इस पेचीदा बग को हल करने के लिए पायथन के टाइप सिस्टम को समझना महत्वपूर्ण है।
किसी ऑब्जेक्ट से डेटा पुनर्प्राप्त करने का प्रयास कर रहे हैं और इसके बजाय "ऑब्जेक्ट सबस्क्रिप्ट योग्य नहीं है" त्रुटि देख रहे हैं? समस्या यह है कि आप गलत डेटा प्रकार को अनुक्रमित कर रहे हैं।
सबस्क्रिप्ट योग्य प्रकारों और इस त्रुटि को हल करने के तरीके के बारे में जानें।
पायथन में "सब्स्क्रिप्टेबल" का क्या अर्थ है?
पायथन में "सबस्क्रिप्टेबल" शब्द का अर्थ एक डेटा प्रकार है जो कई मानों को संग्रहीत करता है जिन्हें आप व्यक्तिगत रूप से एक्सेस कर सकते हैं। आप वर्गाकार ब्रैकेट ([]) नोटेशन का उपयोग करके, सबस्क्रिप्ट योग्य डेटा प्रकार से उसके सूचकांक के माध्यम से एक विशिष्ट मान तक पहुंच सकते हैं।
यदि आप ऐसे डेटा प्रकार में आइटम तक पहुंचने का प्रयास करते हैं जो अनुक्रमित नहीं है, तो पायथन एक "टाइप एरर: ऑब्जेक्ट सबस्क्रिप्ट योग्य नहीं है" अपवाद उठाता है।
पायथन में निम्नलिखित डेटा प्रकार सबस्क्रिप्ट योग्य हैं: सूचियाँ, स्ट्रिंग्स, टुपल्स और शब्दकोश।
सूची_उदाहरण = [1, 3, 5, "इडोवु"]
स्ट्रिंग_उदाहरण = "इडोवु ओमिसोला"
Tuple_example = (1, 3, 5, "इडोवु")
dict_example = {"नाम": "इडोवु", "भाषा": "योरूबा"}
प्रिंट करें (सूची_उदाहरण[0]) # 1
प्रिंट करें (स्ट्रिंग_उदाहरण[3]) # डब्ल्यू
प्रिंट करें (tuple_example[1]) # 3
प्रिंट करें (dict_example["नाम"]) #इदोवु
हालाँकि, सेट, पूर्णांक, फ़्लोट्स और बूलियन, अनुक्रमण के माध्यम से पहुंच योग्य नहीं हैं, इसलिए वे सबस्क्रिप्ट योग्य नहीं हैं:
फ्लोट_उदाहरण = 12.45
int_example = 12367
बूल_उदाहरण = सत्य
सेट_उदाहरण = {1, 3, 5, "पायथन"}
प्रिंट करें (फ्लोट_उदाहरण[1])
प्रिंट करें (बूल_उदाहरण[2])
प्रिंट करें (int_example[2])
प्रिंट करें (set_example[2])
इनमें से प्रत्येक कथन को चलाने का प्रयास "ऑब्जेक्ट सबस्क्रिप्ट योग्य नहीं है" अपवाद को आउटपुट करता है:
अपवाद का समाधान
एक बार जब आप प्रत्येक डेटा प्रकार तक पहुंचने के नियमों को समझ लेते हैं तो "ऑब्जेक्ट सबस्क्रिप्ट योग्य नहीं है" अपवाद को हल करना आसान हो जाता है। इसलिए जिस ऑब्जेक्ट को आप अनुक्रमित करने का प्रयास कर रहे हैं उसके डेटा प्रकार की जांच करके अपना पायथन डिबगिंग प्रारंभ करें।
फ्लोट_उदाहरण = 12.45
int_example = 12367
बूल_उदाहरण = सत्य
सेट_उदाहरण = {1, 3, 5, "पायथन"}
प्रिंट करें (प्रकार (float_example)) #
प्रिंट करें (प्रकार (int_example)) #
प्रिंट करें (प्रकार (bool_example)) #
प्रिंट करें (प्रकार (set_example)) #
एक बार जब आप यह निर्धारित कर लेते हैं कि डेटा प्रकार सबस्क्रिप्ट योग्य नहीं है, तो इसे अनुक्रमणिका योग्य प्रकार में परिवर्तित करने से समस्या हल हो जाती है। यदि डेटा से है तो यह आसान है एक तृतीय-पक्ष API. पूर्णांक, फ्लोट और बूलियन जैसे डेटा प्रकारों को एक स्ट्रिंग में परिवर्तित करना उन्हें सबस्क्रिप्ट योग्य बनाता है:
प्रिंट (str (float_example)[:2]) # 12
प्रिंट (str (int_example)[:2]) # 12
प्रिंट करें (str (bool_example)[:2]) # ट्र
आप यह भी परिणामी पायथन स्ट्रिंग्स में हेरफेर करें के रूप में आप चाहते हैं। यदि पूर्णांक और फ़्लोट से निपटना है, तो आप आउटपुट में मूल डेटा प्रकार को बनाए रखना चाहेंगे। ऐसा करने के लिए, परिणामी मान को स्ट्रिंग के रूप में अनुक्रमित करने के बाद उनके मूल डेटा प्रकार में परिवर्तित करें:
Convert_float = फ्लोट (str (float_example)[:2])
Convert_int = int (str (int_example)[:2])# 12.0 डेटा प्रकार:
प्रिंट करें (परिवर्तित_फ्लोट, f'डेटा प्रकार:{प्रकार (परिवर्तित_फ्लोट)}')
#12 डेटा प्रकार:
प्रिंट करें (कन्वर्टेड_इंट, f'डेटा प्रकार:{प्रकार (कन्वर्टेड_इंट)}')
जहाँ तक एक सेट की बात है, आप इसे एक सूची में बदल सकते हैं। हालाँकि आप इसका उपयोग करके किसी सेट ऑब्जेक्ट को सूची में परिवर्तित कर सकते हैं सूची (सेट) पायथन वन-लाइनर, यह परिणामी सूची में आइटम स्थिति को संरक्षित नहीं करता है। यह सुनिश्चित करने के लिए कि आपको संरक्षित आइटम स्थितियों के साथ एक सूची मिले, पायथन के लैम्ब्डा फ़ंक्शन का उपयोग इस प्रकार करें:
सेट_उदाहरण = {1, 3, 5, "पायथन"}
परिवर्तित = क्रमबद्ध (set_example, key=लैम्ब्डा x: (isinstance (x, str), x))
प्रिंट (परिवर्तित[3]) #पायथन
मास्टर पायथन डिबगिंग
पायथन में सीखने की प्रक्रिया सहज है। लेकिन अगर आप नहीं जानते कि उनसे कैसे निपटा जाए तो साधारण अपवाद आपको परेशान कर सकते हैं। अपने कोड को डीबग करना सीखना और समस्या-समाधान में अपना समय लगाना, पायथन कोडिंग त्रुटियों और अपवादों को ठीक करने में काफी मदद करता है।