Jestem stosunkowo nowy w programowaniu i cierpię na to, co wydaje się być prostym problemem.
Oto fragment kodu powodujący problem (jest częścią tej większej funkcji: 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])
Wydajność:
row[i] = int(time[0]) * 3600 + int(time[1]) * 60 + int(time[2])
UnboundLocalError: local variable "time" referenced before assignment
Wygląda na to, że przydzieliłem time
wartość row[i].split(":")
, więc nie rozumiem, gdzie jest błąd.
Próbowałem zmieniać się wokół drugiego if
oświadczenie (do bardziej konwencjonalnego elif
, itp.), ale to nie zmieniło błędu.
(Pole czasu danych csv ma format hh: mm: ss i próbuję przekonwertować je na sekundy.)
Czy ktoś może wyjaśnić, jak to zrobić time
jest używany przed przypisaniem?
Odpowiedzi:
4 dla odpowiedzi № 1W twoim paśmie, linia row[i] = int(...
jest wcięty za pomocą czterech spacji i czterech zakładek. Nawet jeśli wiersz wydaje się mieć takie samo wcięcie jak linia przed nim, to w rzeczywistości jest wcięty o jeden mniej, gdy interpretuje go Python.
Nie mieszaj kart i spacji; używaj tylko jednego lub drugiego. Dominującym stylem jest używanie tylko spacji.
1 dla odpowiedzi nr 2
- Proszę nie używać nazwy libray dla nazwy zmiennej. „Time” jest zdecydowanie libray.
- Jeśli chcesz użyć zmiennych globalnych w funkcji (i nie uzyskaj „referencji przed przypisaniem” -error ;-)) napisz
global name_of_variable
w kodzie na początku funkcji (patrz Używanie zmiennych globalnych w funkcji innej niż ta, która je utworzyła)