2015-04-23 2 views
0

Для этого кода, я получаю не определенную ошибку, которая:NameError: почему это не определено?

values = line.split(" ") 
NameError: name 'line' is not defined 

Я не знаю, почему line не определен. Кто-то мне помогает. Это, наверное, что-то глупое, и если это потому, что это должно быть что-то еще, может кто-нибудь сказать мне, что это такое?

with open("Class1.csv") as f: 
    columns = f.readline().strip().split(" ") 
    numRows = 0 
    sums = [1] * len(columns) 

    for line in f: 
    # Skip empty lines 
     if not line.strip(): 
      continue 

values = line.split(" ") # This seems to be the problematic line. 
for i in range(1,len(values)): 

    sums[i] += int(values[i]) 
    numRows += 1 

for index, i in enumerate (sums): 
    print (columns[index], 1.0 * (i)/(numRows)) 
+1

Я бы рекомендовал использовать модуль csv –

+0

, что содержит ваш файл? –

ответ

1

Ваш for цикл не зацикливание на всех, поэтому line идентификатор не назначен и, таким образом, ошибку.

У вас, вероятно, есть однострочный файл, который полностью потребляется до цикла.

Примечание: в питона for петли и with заявления делать не ввести новую область! См.:

In [1]: for x in range(5): 
    ...:  print(x) 
    ...:  
0 
1 
2 
3 
4 

In [2]: x # here I can still use x! 
Out[2]: 4 

так что вы делаете, это действительно действует. Проблема заключается в том, что если for не выполняет итерации вы получаете NameError:

In [1]: for x in []: 
    ...:  print('no iteration performed') 

In [2]: x 
--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-2-401b30e3b8b5> in <module>() 
----> 1 x 

NameError: name 'x' is not defined 

только определение функции ввести новую область.

+0

Спасибо за это, это имеет смысл. –

0
values = line.split(" ") 

находится вне вашей петли, поэтому вы определенно не должны писать что-то подобное.

Однако синтаксически «строка» будет определена в глобальной области после первой итерации цикла. В этом случае ошибка возникает из-за того, что цикл for не повторяется даже один раз (из-за вашего ввода). Если бы это произошло, «строка» имела бы последнее значение цикла.

Пример:

for a in range(2): 
    pass 
print (a) 

напечатает 1

однако:

for a in range(0): 
    pass 
print (a) 

возвращает ошибку, потому что никогда не определяется, диапазон (0), не имеющие никаких элементов.

NameError: name 'a' is not defined 
Смежные вопросы