/ / पायथन - असाइनमेंट से पहले संदर्भित स्थानीय चर - पायथन, चर-असाइनमेंट

पायथन - असाइनमेंट से पहले स्थानीय चर संदर्भित - पायथन, चर-असाइनमेंट

मैं प्रोग्रामिंग के लिए अपेक्षाकृत नया हूं और मैं एक साधारण समस्या के रूप में पीड़ित हूं।

यहां स्निपेट है जो समस्या पैदा कर रहा है (यह इस बड़े कार्य का हिस्सा है: http://pastebin.com/2apwWsEv):

for i in range(4,12):                       # remove nulls
if not row[i]:
row[i] = False
if row[i] and (i % 2):                          # odd rows (time)
print row[i]
time = row[i].split(":")
row[i] = int(time[0]) * 3600 + int(time[1]) * 60 + int(time[2])

आउटपुट:

row[i] = int(time[0]) * 3600 + int(time[1]) * 60 + int(time[2])
UnboundLocalError: local variable "time" referenced before assignment

ऐसा लगता है कि मैंने सौंपा time का मूल्य row[i].split(":"), इसलिए मुझे समझ में नहीं आता कि त्रुटि कहां है।

मैंने दूसरे के चारों ओर बदलने की कोशिश की if बयान (एक और पारंपरिक के लिए elif, आदि) लेकिन उसने त्रुटि को नहीं बदला।

(सीएसवी डेटा का समय क्षेत्र एचएच के प्रारूप में है: मिमी: एसएस और मैं इसे सेकंड में बदलने की कोशिश कर रहा हूं।)

क्या कोई बता सकता है कि कैसे time इसे सौंपा जाने से पहले इस्तेमाल किया जा रहा है?

उत्तर:

उत्तर № 1 के लिए 4

आपके पेस्टबिन में, रेखा row[i] = int(... चार रिक्त स्थान और चार टैब का उपयोग कर इंडेंट किया गया है। भले ही रेखा से पहले की रेखा के समान इंडेंटेशन दिखाई देता है, फिर भी यह वास्तव में पाइथन द्वारा व्याख्या किए जाने पर एक कम इंडेंट किया गया है।

टैब और स्पेस इंटरमीक्स न करें; केवल एक या दूसरे का उपयोग करें। मौजूदा शैली केवल रिक्त स्थान का उपयोग करना है।


उत्तर № 2 के लिए 1
  1. कृपया एक चर के नाम के लिए लाइबेरे के नाम का उपयोग न करें। "समय" निश्चित रूप से एक पुस्तकालय है।
  2. यदि आप किसी फ़ंक्शन में वैश्विक चर का उपयोग करना चाहते हैं (और असाइनमेंट से पहले संदर्भित नहीं किया गया है "-error ;-)) लिखें

global name_of_variable

फ़ंक्शन की शुरुआत में आपके कोड में (देखें उन कार्यों के अलावा किसी अन्य फ़ंक्शन में वैश्विक चर का उपयोग करना)