python 3.11+ · Python
संदेश
UnboundLocalError: cannot access local variable 'count' where it is not associated with a value
इसका मतलब
अगर किसी function के भीतर कहीं भी उस नाम को कुछ सौंपा जाता है, तो Python उस नाम को function का स्थानीय चर मान लेता है — और आपने उसे सौंपे जाने से पहले पढ़ लिया। यह तब दिखता है जब आपने उसी नाम का बाहरी मान दिखने की अपेक्षा की थी, या जब आप पहली बार count += 1 जैसी पढ़ने-लिखने वाली क्रिया लिखते हैं। function के भीतर count = 0 से शुरू करना आम उत्तर है; और अगर module स्तर का मान बदलना ही ज़रूरी हो तो global count वह करता है, इस क़ीमत पर कि उस मान को कौन बदलता है यह ट्रैक करना कठिन हो जाता है। 3.10 तक यही त्रुटि 'local variable referenced before assignment' लिखी जाती थी।
सुधार
इसका एक-लाइन कमांड नहीं है। व्याख्या में लिखा है कि क्या देखना है।
- कौन देता है
- python 3.11+
- Python
- 18
Python का traceback उत्तर को दो हिस्सों में बाँटता है — अंतिम पंक्ति बताती है कि क्या ग़लत हुआ, और उसके ऊपर के frames बताते हैं कि कहाँ — इसलिए केवल अंतिम पंक्ति पढ़ने पर नाम मिलता है और जगह छूट जाती है; और NoneType तथा KeyError जैसी "मान नहीं है" वाली त्रुटियों में कारण लगभग हमेशा उस frame से ऊपर होता है जहाँ गिरा।
एरर संदेश कैसे पढ़ें
- पहली पंक्ति से पढ़ें। जितना नीचे जाएँगे उतना वह औज़ार के भीतर की बात है; कारण आम तौर पर सबसे ऊपर लिखा होता है।
- फ़ाइल का नाम और पंक्ति संख्या दिखे तो वहीं से शुरू करें — stack का सबसे ऊपरी frame नहीं, बल्कि वह सबसे ऊपरी पंक्ति जिसमें आपकी लिखी फ़ाइल का नाम हो।
- संदेश को जैसा है वैसा खोजें, पर पहले अपने paths और variable नाम हटा दें — वही खोज को अटकाते हैं।
- वही स्थिति औज़ार के हर संस्करण में अलग शब्दों में आती है। नतीजे बेमेल लगें तो संस्करण संख्या भी जोड़ें।
- कोई सुधार चिपकाने से पहले देख लें कि वह क्या फेंक देगा। इनमें कुछ पलटे नहीं जा सकते।
अक्सर पूछे जाने वाले सवाल
Q. “UnboundLocalError: cannot access local variable 'count' where it is not associated with a value” का क्या मतलब है?
अगर किसी function के भीतर कहीं भी उस नाम को कुछ सौंपा जाता है, तो Python उस नाम को function का स्थानीय चर मान लेता है — और आपने उसे सौंपे जाने से पहले पढ़ लिया। यह तब दिखता है जब आपने उसी नाम का बाहरी मान दिखने की अपेक्षा की थी, या जब आप पहली बार count += 1 जैसी पढ़ने-लिखने वाली क्रिया लिखते हैं। function के भीतर count = 0 से शुरू करना आम उत्तर है; और अगर module स्तर का मान बदलना ही ज़रूरी हो तो global count वह करता है, इस क़ीमत पर कि उस मान को कौन बदलता है यह ट्रैक करना कठिन हो जाता है। 3.10 तक यही त्रुटि 'local variable referenced before assignment' लिखी जाती थी।
Q. इसे कैसे ठीक करें?
एक-लाइन कमांड नहीं है। ऊपर की व्याख्या में लिखा है कि क्या देखना है।
Q. यह कौन-सा औज़ार देता है?
python 3.11+। यह Python में आता है, और संदेश 14 शब्दों का है।