You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:50:30