python · Python
संदेश
TypeError: greet() takes 1 positional argument but 2 were given
इसका मतलब
आपने function की स्वीकार सीमा से एक तर्क अधिक भेजा, और जब अंतर ठीक एक का हो तो वह लगभग हमेशा self होता है। किसी class के भीतर method को def greet(name): के रूप में परिभाषित करें और obj.greet("x") बुलाएँ, तो Python obj को पहला तर्क बनाकर भेजता है — इससे दो हो जाते हैं। यदि यह method है तो उसे def greet(self, name): कर दें ताकि वह self ले; और यदि उसे instance की ज़रूरत ही नहीं, तो उस पर @staticmethod लगाएँ।
सुधार
इसका एक-लाइन कमांड नहीं है। व्याख्या में लिखा है कि क्या देखना है।
- कौन देता है
- python
- Python
- 18
Python का traceback उत्तर को दो हिस्सों में बाँटता है — अंतिम पंक्ति बताती है कि क्या ग़लत हुआ, और उसके ऊपर के frames बताते हैं कि कहाँ — इसलिए केवल अंतिम पंक्ति पढ़ने पर नाम मिलता है और जगह छूट जाती है; और NoneType तथा KeyError जैसी "मान नहीं है" वाली त्रुटियों में कारण लगभग हमेशा उस frame से ऊपर होता है जहाँ गिरा।
एरर संदेश कैसे पढ़ें
- पहली पंक्ति से पढ़ें। जितना नीचे जाएँगे उतना वह औज़ार के भीतर की बात है; कारण आम तौर पर सबसे ऊपर लिखा होता है।
- फ़ाइल का नाम और पंक्ति संख्या दिखे तो वहीं से शुरू करें — stack का सबसे ऊपरी frame नहीं, बल्कि वह सबसे ऊपरी पंक्ति जिसमें आपकी लिखी फ़ाइल का नाम हो।
- संदेश को जैसा है वैसा खोजें, पर पहले अपने paths और variable नाम हटा दें — वही खोज को अटकाते हैं।
- वही स्थिति औज़ार के हर संस्करण में अलग शब्दों में आती है। नतीजे बेमेल लगें तो संस्करण संख्या भी जोड़ें।
- कोई सुधार चिपकाने से पहले देख लें कि वह क्या फेंक देगा। इनमें कुछ पलटे नहीं जा सकते।
अक्सर पूछे जाने वाले सवाल
Q. “TypeError: greet() takes 1 positional argument but 2 were given” का क्या मतलब है?
आपने function की स्वीकार सीमा से एक तर्क अधिक भेजा, और जब अंतर ठीक एक का हो तो वह लगभग हमेशा self होता है। किसी class के भीतर method को def greet(name): के रूप में परिभाषित करें और obj.greet("x") बुलाएँ, तो Python obj को पहला तर्क बनाकर भेजता है — इससे दो हो जाते हैं। यदि यह method है तो उसे def greet(self, name): कर दें ताकि वह self ले; और यदि उसे instance की ज़रूरत ही नहीं, तो उस पर @staticmethod लगाएँ।
Q. इसे कैसे ठीक करें?
एक-लाइन कमांड नहीं है। ऊपर की व्याख्या में लिखा है कि क्या देखना है।
Q. यह कौन-सा औज़ार देता है?
python। यह Python में आता है, और संदेश 10 शब्दों का है।