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

Python类中使用csv模块出现AttributeError,如何正确初始化模块?

解决AttributeError: 'CSV_Processing' object has no attribute 'reader'问题

哎,这个问题我太熟了——你这是不小心踩了命名冲突的坑!

咱们一步步拆解:你一开始导入了Python标准库的csv模块,但后面创建类实例的时候,居然把实例命名成了csv:

csv = CSV_Processing('CSV_file.csv')

这下可好,原来的csv模块被你自己的实例给覆盖了!当你的csv_init方法里执行csv.reader(csv_file)时,Python根本找不到原来的csv模块了,它以为你要访问这个CSV_Processing实例的reader属性,但你的类里根本没定义这个属性,自然就抛出AttributeError了。

修正后的代码

只需要把实例变量名改成和模块名不同的(比如csv_processor),再顺便优化下可变默认参数的坑(csv_content={}这种写法会导致多次调用方法时共享同一个字典,这通常不是预期行为):

import csv
print(csv.__file__)

class CSV_Processing:
    def __init__(self, file):
        self.file = file
    
    def csv_init(self, csv_content=None):
        # 规避可变默认参数的问题
        if csv_content is None:
            csv_content = {}
        with open(self.file) as csv_file:
            csv_reader = csv.reader(csv_file)
            line_count = 0
            for row in csv_reader:
                csv_content[str(line_count)] = row
                line_count += 1
            print(csv_content)

# 实例名改成和模块名不重复的
csv_processor = CSV_Processing('CSV_file.csv')
csv_processor.csv_init()

额外小贴士

  • 永远不要用Python标准库模块的名字来命名自己的变量、类或者文件,不然很容易出现这种覆盖模块的乌龙
  • 函数的可变默认参数(比如[]、{})要谨慎使用,最好像上面那样用None来初始化,然后在函数内部创建新的可变对象

内容的提问来源于stack exchange,提问作者iczyrski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:15:05