Python函数UnboundLocalError问题:CSV前10行读取失败
解决CSV读取函数的UnboundLocalError错误
错误原因
你定义的rows是全局变量,但在lines()函数中执行rows=rows+1时,Python会将rows视为局部变量——因为函数内对变量进行了赋值操作,Python默认该变量是局部的。但此时局部的rows还未初始化,就会触发UnboundLocalError。
解决方案
方案1:使用global声明全局变量
在函数内显式声明使用全局的rows变量,让Python知道不要将其当作局部变量:
import csv # 必须导入csv模块才能使用DictReader rows = 0 def lines(): global rows # 声明使用全局变量 with open('iamacsvfile.csv') as file: dictreader = csv.DictReader(file) for row in dictreader: print(row) rows += 1 if rows >= 10: break lines()
注意:全局变量会增加代码耦合性,非必要不推荐使用。
方案2:将计数器放在函数内部(推荐)
直接在函数内初始化rows,避免全局变量的问题,代码更独立:
import csv def lines(): rows = 0 # 函数内部维护计数器 with open('iamacsvfile.csv') as file: dictreader = csv.DictReader(file) for row in dictreader: print(row) rows += 1 if rows >= 10: break lines()
方案3:用enumerate简化计数(最简洁)
利用Python内置的enumerate函数直接获取行索引,无需手动维护计数器:
import csv def lines(): with open('iamacsvfile.csv') as file: dictreader = csv.DictReader(file) # enumerate从0开始计数,第10行对应索引9 for idx, row in enumerate(dictreader): print(row) if idx >= 9: break lines()
这种写法更符合Pythonic风格,代码更简洁易读。
内容的提问来源于stack exchange,提问作者dreamkeeper
相关产品推荐
相关产品推荐

