2014-09-18 2 views
0

У меня есть файл csv, из которого я читаю несколько значений и вычисляю среднее и стандартное отклонение. Я использую pandas для работы с моими файлами csv. Для расчета среднего значения я делаю это:Переменная, на которую ссылается до ошибки присваивания

def mean(filename): 
    csva = pd.read_csv(filename, header =0) 
    ratios = np.array(csva["ratio"]) 
    return ratios[~np.isnan(ratios)].mean() 

Это прекрасно работает. Однако есть несколько файлов (2/10 файлов), где заголовок ratio заменяется на zr2212. Если я попробую эту функцию в этих файлах, я получаю KeyError : u'no item named zr2212'. Таким образом, я изменил свой код к этому:

def mean(filename): 
     csva = pd.read_csv(filename, header =0) 
     try: 
      ratios = np.array(csva["ratio"]) 
     except KeyError as e: 
      if e == "no item named ratio": 
       ratios = np.array(csva["zr2212"] 
     return ratios[~np.isnan(ratios)].mean() 

Однако я получаю ошибку UnoundLocalError: local variable 'ratios' referenced before assignment на return заявлении. Я не понимаю, почему я получаю там ошибку

+0

У вас есть синтаксическая ошибка в этой строке 'ratios = np.array (csva [" zr2212 "]' you omit') 'это копия прошлого? – Kasramvd

ответ

4
if e == "no item named ratio": 

Это неверно. e является исключением, а не строкой. Выньте линию if, и она должна работать.

+0

В этом была проблема. Однако я помню базовый класс python, где нас учили чему-то вроде этого, поэтому я использовал его – letsc

+0

Собственно, он, вероятно, ищет 'e.msg' или' e.message', а может быть, просто 'str (e)'. –

+1

Вы можете проверить поле 'message' в исключении, если хотите, но я не думаю, что в этом есть необходимость. – khelwood

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