2014-12-12 3 views
1

Я относительно новичок в программировании, и я страдаю от того, что кажется простой проблемой.Python - локальная переменная, указанная перед назначением

Вот фрагмент кода, который вызывает проблемы (она является частью этой большой функции: 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 и т. Д.), Но это не изменило ошибку.

(поле времени, данных в формате CSV, в формате чч: мм: сс, и я стараюсь, чтобы преобразовать его в секундах.)

Может кто-то пожалуйста, объясните, как time используется до его назначения?

ответ

4

В вашем pastebin линия row[i] = int(... имеет отступ с четырьмя пробелами и четырьмя вкладками. Несмотря на то, что линия, похоже, имеет такой же отступ, как и перед предыдущей строкой, на самом деле она имеет отступы меньше, если интерпретировать Python.

Не смешивайте язычки и пробелы; используйте только тот или иной. Преобладающий стиль - использовать только пробелы.

1
  1. Пожалуйста, не используйте имя libray для имени переменной. «время» - это, безусловно, либрет.
  2. Если вы хотите использовать глобальные переменные в функции (и не получить «обращаться до assignment'-ошибки ;-)) написать

global name_of_variable

в коде в начале функция (см. Using global variables in a function other than the one that created them)

Смежные вопросы