Python - for循环中的变量就好像它不存在一样

时间:2015-04-07 01:21:43

标签: python for-loop

在全面的上下文中,我有一个.csv文件,我正在读取数据,然后我想知道文件中有多少行。

我已尝试使用此代码执行此操作:

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

但每当我尝试使用变量 IDsQuant (如上面的IDQuant = int(IDsQuant))做某事时,它会给我这个错误:

UnboundLocalError: local variable 'IDsQuant' referenced before assignment

我该如何解决这个问题?

提前致谢。

3 个答案:

答案 0 :(得分: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))   

答案 1 :(得分:0)

您尚未定义示例中的CharsDict,以及您是如何阅读该文件的。

如果您的阅读"返回一个数组 - 行,然后只有行数为len(行)。

如果OTOH,您正在迭代迭代,则可以在迭代开始之前递增设置为零的计数。

答案 2 :(得分:0)

看来这个

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

更有效和有用
for row in CharsDict:
    IDsQuant = sum(1 for row in CharsDict)
IDsQuant = int(IDsQuant)

通过使用此替代方案,我似乎没有更多错误。 谢谢你的帮助!