Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन टाइप एरर:'फ़ंक्शन' ऑब्जेक्ट सबस्क्रिप्ट करने योग्य समाधान नहीं है

चलने योग्य वस्तुओं के विपरीत, आप इंडेक्सिंग सिंटैक्स का उपयोग करके किसी फ़ंक्शन से किसी मान तक नहीं पहुंच सकते हैं।

यहां तक ​​​​कि अगर कोई फ़ंक्शन एक पुनरावर्तनीय लौटाता है, तो आपको इसके मानों तक पहुंचने से पहले किसी फ़ंक्शन से प्रतिक्रिया को एक चर में असाइन करना होगा। अन्यथा, आप एक "लेखन त्रुटि:'फ़ंक्शन' ऑब्जेक्ट सबस्क्रिप्ट योग्य नहीं है" त्रुटि का सामना करते हैं।

इस गाइड में, हम बात करते हैं कि इस त्रुटि का क्या अर्थ है। हम इस त्रुटि के दो उदाहरणों के माध्यम से चलते हैं ताकि आप यह पता लगा सकें कि इसे अपने कोड में कैसे हल किया जाए।

लेखन त्रुटि:'फ़ंक्शन' ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं है

इंडेक्सिंग नोटेशन का उपयोग करके सूचियों और स्ट्रिंग्स जैसी चलने योग्य वस्तुओं तक पहुंचा जा सकता है। यह आपको एक पुनरावर्तनीय से एक व्यक्तिगत आइटम, या आइटम की श्रेणी तक पहुंचने देता है।

निम्नलिखित कोड पर विचार करें:

ग्रेड =["ए", "ए", "बी"]प्रिंट (ग्रेड [0])

सूचकांक स्थिति 0 पर मान ए है। इस प्रकार, हमारा कोड "ए" देता है। यह सिंटैक्स किसी फ़ंक्शन पर काम नहीं करता है। ऐसा इसलिए है क्योंकि एक फ़ंक्शन एक पुनरावृत्त वस्तु नहीं है। फ़ंक्शन केवल एक पुनरावृत्त वस्तु को वापस करने में सक्षम होते हैं यदि उन्हें कहा जाता है।

"लेखन त्रुटि:'फ़ंक्शन' ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं है" त्रुटि तब होती है जब आप किसी फ़ंक्शन तक पहुंचने का प्रयास करते हैं जैसे कि यह एक चलने योग्य वस्तु थी।

यह त्रुटि दो परिदृश्यों में आम है:

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

  • जब आप किसी फ़ंक्शन को पुनरावर्तनीय के समान नाम असाइन करते हैं
  • जब आप किसी फ़ंक्शन से मानों तक पहुँचने का प्रयास करते हैं जैसे कि फ़ंक्शन चलने योग्य हो

आइए इन दोनों परिदृश्यों का विश्लेषण करें।

परिदृश्य #1:पुनरावर्तनीय के समान नाम वाला फ़ंक्शन

एक प्रोग्राम बनाएं जो एक स्कूल में एक छात्र के बारे में जानकारी प्रिंट करता है। हम एक छात्र और उनके नवीनतम परीक्षण स्कोर के बारे में जानकारी के साथ एक शब्दकोश को परिभाषित करके शुरू करते हैं:

student ={ "name":"Holi", "latest_test_score":"B", "class":"Sixth Grade" }

हमारे शब्दकोश में तीन कुंजियाँ और तीन मान हैं। एक कुंजी एक छात्र के नाम का प्रतिनिधित्व करती है; एक कुंजी एक छात्र द्वारा अपने नवीनतम परीक्षण पर अर्जित स्कोर का प्रतिनिधित्व करती है; एक कुंजी उस कक्षा का प्रतिनिधित्व करती है जिसमें छात्र है।

अगला, हम एक फ़ंक्शन को परिभाषित करने जा रहे हैं जो इन मानों को कंसोल पर प्रिंट करता है:

 डीईएफ़ छात्र (छात्र):प्रिंट ("नाम:" + छात्र ["नाम"]) प्रिंट ("नवीनतम टेस्ट स्कोर:" + छात्र ["latest_test_score"]) प्रिंट ("कक्षा:" + छात्र ["वर्ग "])

हमारा कोड "छात्र" शब्दकोश में तीन मानों को कंसोल पर प्रिंट करता है। "छात्र" शब्दकोश को छात्र () फ़ंक्शन में एक तर्क के रूप में पारित किया जाता है।

आइए हमारे फ़ंक्शन को कॉल करें और "छात्र" शब्दकोश को पैरामीटर के रूप में पास करें:

छात्र (छात्र)

हमारा पायथन कोड एक त्रुटि फेंकता है:

ट्रेसबैक (सबसे हालिया कॉल अंतिम):फ़ाइल "main.py", पंक्ति 8, <मॉड्यूल> छात्र (छात्र) में फ़ाइल "main.py", पंक्ति 4, छात्र प्रिंट में ("नाम:" + छात्र [ "नाम"]) लेखन त्रुटि:'फ़ंक्शन' ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं है

यह त्रुटि इसलिए होती है क्योंकि हमारे पास एक ही नाम के साथ एक फ़ंक्शन और एक पुनरावर्तनीय है। "छात्र" को पहले एक शब्दकोश के रूप में घोषित किया जाता है। फिर हम उसी नाम से एक फंक्शन को परिभाषित करते हैं। यह "छात्र" को एक शब्दकोश के बजाय एक फ़ंक्शन बनाता है।

जब हम छात्र () फ़ंक्शन में पैरामीटर के रूप में "छात्र" पास करते हैं, तो हम "छात्र" नाम से फ़ंक्शन पास कर रहे हैं।

हम अपने छात्र फ़ंक्शन का नाम बदलकर इस समस्या का समाधान करते हैं:

<पूर्व> def show_student_details (छात्र):प्रिंट ("नाम:" + छात्र ["नाम"]) प्रिंट ("नवीनतम टेस्ट स्कोर:" + छात्र ["latest_test_score"]) प्रिंट ("कक्षा:" + छात्र ["वर्ग "])show_student_details(छात्र)

हमने अपने फ़ंक्शन का नाम बदलकर “show_student_details” कर दिया है। आइए अपना कोड चलाएं और देखें कि क्या होता है:

Name:HollyLatest Test Score:BClass:छठी कक्षा

हमारा कोड हमारे छात्र के बारे में जानकारी को कंसोल पर सफलतापूर्वक प्रिंट करता है।

परिदृश्य #2:अनुक्रमण का उपयोग करके किसी फ़ंक्शन को एक्सेस करना

एक प्रोग्राम लिखें जो छात्र रिकॉर्ड की एक सूची को फ़िल्टर करता है और केवल वही दिखाता है जहां एक छात्र ने अपने नवीनतम परीक्षण पर ए ग्रेड अर्जित किया है।

हम छात्रों की एक सरणी को परिभाषित करके शुरू करेंगे:

विद्यार्थी =[{"नाम":"होली", "ग्रेड":"बी"}, {"नाम":"सामंथा", "ग्रेड":"ए"}, {"नाम":"इयान" , "ग्रेड":"ए" }]

छात्रों की हमारी सूची में तीन शब्दकोश हैं। प्रत्येक शब्दकोश में एक छात्र का नाम और वह ग्रेड होता है जो उन्होंने अपने सबसे हाल के परीक्षण में अर्जित किया था।

इसके बाद, एक फ़ंक्शन परिभाषित करें जो ए ग्रेड अर्जित करने वाले छात्रों की सूची लौटाता है:

def get_a_grad_students(pupils):a_grad_students =[] p के लिए विद्यार्थियों में:यदि p["ग्रेड"] =="A":a_grad_students.append(p) print(a_grad_students) रिटर्न a_grad_students

समारोह "विद्यार्थियों" नामक छात्रों की एक सूची स्वीकार करता है। हमारा फ़ंक्शन लूप के लिए उस सूची पर पुनरावृति करता है। यदि किसी विशेष छात्र ने "ए" ग्रेड अर्जित किया है, तो उनका रिकॉर्ड "ए_ग्रेड_स्टूडेंट्स" सूची में जोड़ा जाता है। नहीं तो कुछ नहीं होता।

एक बार सभी छात्रों की खोज हो जाने के बाद, हमारा कोड "ए" ग्रेड अर्जित करने वाले छात्रों की एक सूची प्रिंट करता है और उस सूची को मुख्य कार्यक्रम में वापस कर देता है।

हम "ए" ग्रेड अर्जित करने वाले पहले छात्र को पुनः प्राप्त करना चाहते हैं। ऐसा करने के लिए, हम अपने फ़ंक्शन को कॉल करते हैं और पहले छात्र के रिकॉर्ड को पुनः प्राप्त करने के लिए इंडेक्सिंग सिंटैक्स का उपयोग करते हैं:

प्रथम =get_a_grad_students[0]print(first)

हमारा कोड चलाएँ:

ट्रेसबैक (सबसे हालिया कॉल अंतिम):फ़ाइल "main.py", लाइन 16, <मॉड्यूल> में पहले =get_a_grad_students[0]TypeError:'function' ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं है

हमारा कोड एक त्रुटि देता है। हम पहले फ़ंक्शन को कॉल किए बिना "get_a_grad_students" फ़ंक्शन से किसी मान तक पहुंचने का प्रयास कर रहे हैं।

इस समस्या को हल करने के लिए, इससे पहले कि हम इससे मान प्राप्त करने का प्रयास करें, हमें अपने फ़ंक्शन को कॉल करना चाहिए:

a_grads =get_a_grad_students(students)first =a_grads[0]print(first)

सबसे पहले, हम अपने get_a_grade_students() . को कॉल करते हैं कार्य करें और एक पैरामीटर के रूप में छात्रों की हमारी सूची निर्दिष्ट करें। इसके बाद, हम इंडेक्सिंग का उपयोग उस सूची से इंडेक्स स्थिति 0 पर रिकॉर्ड प्राप्त करने के लिए करते हैं जो get_a_grade_students() फ़ंक्शन रिटर्न। अंत में, हम उस रिकॉर्ड को कंसोल पर प्रिंट करते हैं।

आइए अपना कोड निष्पादित करें:

[{'नाम':'सामंथा', 'ग्रेड':'ए'}, {'नाम':'इयान', 'ग्रेड':'ए'}]{'नाम':'सामंथा', ' ग्रेड':'ए'}

हमारा कोड सबसे पहले "ए" ग्रेड अर्जित करने वाले सभी छात्रों की एक सूची प्रिंट करता है। इसके बाद, हमारा कोड सूची में पहले छात्र को प्रिंट करता है जिसने "ए" ग्रेड अर्जित किया है। इस मामले में वह छात्र सामंथा थी।

निष्कर्ष

"लेखन त्रुटि:'फ़ंक्शन' ऑब्जेक्ट सबस्क्रिप्ट करने योग्य नहीं है" त्रुटि तब उठाई जाती है जब आप किसी फ़ंक्शन से किसी आइटम तक पहुंचने का प्रयास करते हैं जैसे कि फ़ंक्शन एक स्ट्रिंग या सूची की तरह एक चलने योग्य वस्तु थी।

इस त्रुटि को हल करने के लिए, पहले सुनिश्चित करें कि आप वेरिएबल घोषित करने के बाद फ़ंक्शन घोषित करके मूल्यों को संग्रहीत करने वाले किसी भी वेरिएबल को ओवरराइड नहीं करते हैं। इसके बाद, सुनिश्चित करें कि आप किसी फ़ंक्शन को उसके द्वारा लौटाए गए मानों तक पहुँचने का प्रयास करने से पहले कॉल करते हैं।

अब आप एक पेशेवर कोडर की तरह इस सामान्य पायथन त्रुटि को हल करने के लिए तैयार हैं!


  1. लेखन त्रुटि:'अपरिभाषित' जावास्क्रिप्ट में एक वस्तु नहीं है

    लेखन त्रुटि:अपरिभाषित एक वस्तु नहीं है त्रुटि तब होती है जब किसी संपत्ति का उपयोग किया जाता है या किसी अपरिभाषित वस्तु पर एक विधि को कॉल किया जाता है। यह त्रुटि केवल सफारी ब्राउज़र पर दिखाई जाती है। TypeError के लिए कोड निम्नलिखित है - अपरिभाषित जावास्क्रिप्ट में ऑब्जेक्ट त्रुटि नहीं है - उदाहरण दस

  1. issubset () पायथन में फ़ंक्शन

    इस लेख में, हम पायथन स्टैंडर्ड लाइब्रेरी में उपलब्ध issubset () फ़ंक्शन के कार्यान्वयन और उपयोग के बारे में जानेंगे। issubset() विधि बूलियन ट्रू लौटाती है जब एक सेट के सभी तत्व दूसरे सेट में मौजूद होते हैं (एक तर्क के रूप में पारित) अन्यथा, यह बूलियन गलत देता है। नीचे दिए गए चित्र में B, A का एक उ

  1. पाइथन फ़ंक्शन से जेसन ऑब्जेक्ट कैसे वापस करें?

    हम दिए गए पायथन डिक्शनरी का उपयोग करते हुए एक पायथन फ़ंक्शन से एक json ऑब्जेक्ट लौटाते हैं। उदाहरण import json a = {'name':'Sarah', 'age': 24, 'isEmployed': True } # a python dictionary def retjson(): python2json = json.dumps(a) print python2json retjson() आउटपुट {&qu