/ / Python - zmienna lokalna przywoływana przed przypisaniem - python, przypisanie zmiennej

Python - zmienna lokalna przywoływana przed przypisaniem - python, variable-assignment

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 № 1

W 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
  1. Proszę nie używać nazwy libray dla nazwy zmiennej. „Time” jest zdecydowanie libray.
  2. 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)