2015-04-07 25 views
0

在全面的上下文中,我有一个.csv文件,我正在读取数据,然后我想知道有多少行存在于文件。python - for循环中的变量就好像它不存在一样

我已经尝试这样做,与此代码:

for row in CharsDict: 
    IDsQuant = sum(1 for row in CharsDict) 
IDsQuant = int(IDsQuant) 

但每当我尝试做一些与变量IDsQuant(就像上面IDsQuant = INT(IDsQuant)),它给了我这个错误:

UnboundLocalError: local variable 'IDsQuant' referenced before assignment 

我该如何解决这个问题?

在此先感谢。

+0

在你的循环'IDsQuant = 0'之前定义它。如果你没有在循环内的范围内定义它,那就是你收到错误的原因。 – Cfreak

+0

@Cfreak不认为有帮助,如果该变量没有按照for循环设置,那么每次只会得到一个0(错误)的回答。也没有必要,因为你没有做'+ ='或者其他需要它的东西。 – Marius

+2

使用两个for循环有什么用处,似乎IDsQuant每次都会得到相同的值 –

回答

0

看来,这

for row in CharsDict: 
    IDsQuant += 1 
IDsQuant = int(IDsQuant) 

是较为有效和有用比

for row in CharsDict: 
    IDsQuant = sum(1 for row in CharsDict) 
IDsQuant = int(IDsQuant) 

我似乎用这种替代获得没有更多的错误。 感谢您的帮助!

0

您还没有定义CharsDict在您的示例中,也不知道您如何阅读文件。

如果您的“读取”返回一个数组 - 行,那么只有行数将是len(行)。

如果OTOH正在遍历一个迭代,则可以在迭代开始之前增加一个设置为零的计数。

2

由于循环不会在Python中创建新的作用域,因此您认为代码应该正常工作是正确的。

但是,如果由于某种原因(例如CharsDict为空容器)而未执行循环的主体,则将不会创建IDsQuant变量,从而生成所见的错误。

下面的代码显示了这种情况的例子---相同的代码,运行不同的参数。在示例函数的第二次调用中,循环将不会运行,重现您所拥有的情况,并出现相同的错误。

def test_scope(n_loops):              
    for i in range(n_loops):              
     variable = i               
    return variable               


if __name__ == '__main__':             
    print('First test:', test_scope(1))          

    print('Empty loop:', test_scope(0))