Python读取CSV存入MYDATA类报filename未定义错误解决
问题背景
现有存储3行3列随机数值的逗号分隔文件my_data_file.csv,需求为读取文件数据存入MYDATA类,通过实例方法调用的形式在窗口打印该3×3数组。初始实现代码运行后抛出NameError: name 'filename' is not defined错误,要求在不定义classmethod的前提下定位错误点,给出可运行的正确实现。
初始错误代码如下:
class MYDATA: def __init__(self,filename): self.filename = filename # get the main axis of the file. self.values = self.get_values_from_file() def get_values_from_file(self): values = [] with open(filename, 'r') as file: for line in file: pos = list(map(float, line.split(','))) values.append(pos) return values print(MYDATA.get_values_from_file('my_data_file.csv'))
错误点定位
代码共有两处核心错误:
- 实例方法调用逻辑错误:
get_values_from_file是类的实例方法,必须先创建类的实例、完成实例初始化后才能调用。直接通过类名MYDATA.get_values_from_file()调用时,传入的字符串'my_data_file.csv'会被赋值给方法的第一个形参self,方法内部不存在filename这个局部/全局变量,直接触发命名错误。 - 类属性访问方式错误:
__init__方法中已经将传入的文件路径绑定为实例属性self.filename,但get_values_from_file方法内打开文件时直接写了filename,没有加self.前缀,解释器会将其识别为方法内的局部变量,找不到对应定义就会抛出NameError。
正确实现代码
class MYDATA: def __init__(self,filename): self.filename = filename # 初始化时自动读取文件内容存入values属性 self.values = self.get_values_from_file() def get_values_from_file(self): values = [] # 修正:通过self访问实例绑定的文件路径属性 with open(self.filename, 'r') as file: for line in file: # 去除首尾空白字符,跳过空行避免转换异常 line = line.strip() if not line: continue row = list(map(float, line.split(','))) values.append(row) return values # 先传入文件路径实例化MYDATA类,再打印读取到的3×3数组 if __name__ == "__main__": my_data = MYDATA('my_data_file.csv') print(my_data.values)
运行上述代码后,即可正常读取csv文件内容,在窗口输出格式为3行3列的二维浮点数数组。
内容的提问来源于stack exchange,提问作者Jeroen
相关产品推荐
相关产品推荐

