Python读取CSV存入列表时遇TypeError错误求助
问题排查与解决
你的代码存在几个关键问题,导致了TypeError错误,以下是逐一修正方案:
错误原因
- 类方法未绑定实例:
read_csv_file作为类的实例方法,缺少第一个必填参数self,无法访问实例的属性(比如你定义的self.list)。 - 误用内置类型:循环里的
list.append(row)调用的是Python内置的list类方法,而非你实例中定义的self.list,自然会报"未绑定方法需要参数"的错误。 - 参数被硬编码覆盖:你在方法里用
filepath = "*file name*.csv"覆盖了传入的参数,导致无法灵活指定文件路径。 - 无返回值却赋值:
read_csv_file没有返回值,但你在main里用cs.list = cs.read_csv_file(),会把None赋值给cs.list,覆盖原有的空列表。
修正后的代码
读取CSV的类代码(建议重命名为read_csv_file.py)
import csv # 类名遵循PEP8规范,用大驼峰命名 class CSVFile: def __init__(self): # 避免用list做变量名,和内置类型重名易混淆 self.data_list = [] # 添加self参数,保留filepath参数用于传入文件路径 def read_csv_file(self, filepath): # 打开文件时指定newline和编码,避免换行符问题和乱码 with open(filepath, "r", newline="", encoding="utf-8") as csv_file: reader = csv.reader(csv_file) # 直接将reader转换为列表,替代循环append,更简洁 self.data_list = list(reader) # 如果你需要保留循环append的写法,替换成下面的代码: # for row in reader: # self.data_list.append(row)
main.py代码
from read_csv_file import CSVFile def main(): # 创建类实例 cs = CSVFile() # 传入你的实际CSV文件路径 cs.read_csv_file("your_actual_file.csv") # 直接打印实例中存储数据的列表 print(cs.data_list) if __name__ == "__main__": main()
关键修正点说明
- 给类方法添加
self参数,确保能访问实例的属性。 - 用
self.data_list替代list,明确操作的是实例的列表属性。 - 移除硬编码的文件路径,改为通过参数传入,提升代码灵活性。
- 简化数据读取逻辑:直接将
csv.reader转换为列表,省去循环append的步骤(如果需要逐行处理数据,再保留循环写法)。
内容的提问来源于stack exchange,提问作者Ryan Bukhari
相关产品推荐
相关产品推荐

