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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:06:34