Python—for循环中的变量的行为就像它没有';不存在

Python—for循环中的变量的行为就像它没有';不存在,python,for-loop,Python,For Loop,在全面的上下文中,我有一个.csv文件,我从中读取数据,然后我想知道文件中有多少行 我已尝试使用以下代码执行此操作: for row in CharsDict: IDsQuant = sum(1 for row in CharsDict) IDsQuant = int(IDsQuant) 但是,每当我尝试使用变量IDsQuant(如上面的IDsQuant=int(IDsQuant))执行某些操作时,都会出现以下错误: UnboundLocalError: local variable

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

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

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
我怎样才能解决这个问题


提前感谢。

您没有定义示例中的
字符是什么,也没有定义如何读取文件

如果“read”返回一个数组-rows,那么只有行数是len(rows)


如果是OTOH,那么您正在迭代一个iterable,您可以在迭代开始之前增加一个设置为零的计数。

您正确地假设代码应该工作,因为循环不会在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))   
看来这个

for row in CharsDict:
    IDsQuant += 1
IDsQuant = int(IDsQuant)
在某种程度上比

for row in CharsDict:
    IDsQuant = sum(1 for row in CharsDict)
IDsQuant = int(IDsQuant)
通过使用此选项,我似乎不会再犯错误。
谢谢你的帮助

在循环之前定义它
IDsQuant=0
。如果不将其仅定义在循环内的作用域中,这就是您收到错误的原因。@Cfreak不认为这有帮助,如果变量未按for循环的预期设置,则每次只能得到(错误的)0答案。也没有必要,因为您没有执行
+=
或其他需要它的操作。使用两个for循环有什么意义,IDsQuant似乎每次都会得到相同的值time@Cfreak,看到您的编辑,我不认为Python有这样的“循环范围”。在循环内定义的任何内容在循环外都可用。我认为这更多的是因为初始for循环没有在空的
CharDict
上运行。如何:
print len(CharsDict)