在全面的上下文中,我有一个.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
我该如何解决这个问题?
提前致谢。
答案 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)
通过使用此替代方案,我似乎没有更多错误。 谢谢你的帮助!