对于此代码,我收到了一个未定义的错误:
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))
答案 0 :(得分:1)
您的for
循环根本没有循环,因此line
标识符未被分配,从而导致错误。
您可能有一个单行文件,在循环之前已完全消耗。
注意:在python 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
仅函数定义引入了新范围。
答案 1 :(得分:0)
values = line.split(" ")
在你的for循环之外,所以你绝对不应该写那样的东西。
然而,从句法上来说,&#34; line&#34;将在第一次循环迭代后在全局范围中定义。在这种情况下,错误是因为你的for循环不会迭代一次(因为你的输入)。如果是的话,&#34; line&#34;将具有循环的最后一个值。
示例:
for a in range(2):
pass
print (a)
将打印1
但是:
for a in range(0):
pass
print (a)
将返回错误,因为a从未定义,范围(0)没有元素。
NameError: name 'a' is not defined