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

Python如何将文本文件作为参数传入函数及代码错误排查

代码错误排查与逻辑说明

存在的错误

  • 调用函数传入文件名时未加引号:代码里写的get_data(data.txt)会让Python把data.txt当成未定义的变量,直接触发NameError,文件名是字符串类型,必须用单引号或双引号包裹,正确写法为get_data("data.txt")。
  • 未处理文件读取时的格式兼容问题:readlines()读取的每行末尾默认带换行符\n,如果文件存在空行、字段前后有空格、末尾有空行,直接拆分后转整数会触发ValueError;如果某行字段数不足3个,还会触发索引越界错误。
  • 打开文件未指定编码:不同操作系统默认文件编码不一致,Windows系统默认编码为GBK,如果data.txt是UTF-8格式保存,直接打开会触发编码报错,建议显式指定encoding="utf-8"。

原代码逻辑说明

原代码的整体设计思路是正确的,执行流程如下:

  1. 定义get_data函数,接收文件路径作为入参,用来读取指定逗号分隔格式的商品数据文件
  2. 初始化空列表records,用来存储解析完成的结构化商品记录
  3. 通过with open()上下文管理器打开目标文件,这种写法会在文件读写完成后自动释放资源,不需要手动调用close()方法,是Python操作文件的标准推荐写法
  4. 调用readlines()将文件所有内容读取为行列表,逐行遍历处理:
    • 用逗号作为分隔符拆分单行字符串,得到字段列表
    • 按字段位置分别提取商品名、价格、库存,其中价格和库存转为整数类型
    • 将单条商品记录追加到总记录列表records中
  5. 所有行处理完成后,返回结构化的记录列表
  6. 调用函数获取结果,打印输出

修正后可运行代码

def get_data(filename):
    records = []
    # 显式指定文件编码,兼容不同系统环境
    with open(filename, encoding="utf-8") as readfile:
        lines = readfile.readlines()
        for line in lines:
            # 去除每行首尾的空格、换行符,跳过空行
            line_content = line.strip()
            if not line_content:
                continue
            str_rec = line_content.split(",")
            # 跳过字段数量不足的异常行
            if len(str_rec) < 3:
                continue
            pname = str_rec[0].strip()
            price = int(str_rec[1].strip())
            quantity = int(str_rec[2].strip())
            records.append([pname, price, quantity])
    return records

# 文件名作为字符串传入,必须加引号
hell = get_data("data.txt")
print(hell)

注意:运行前需要确认data.txt和Python脚本在同一目录下,如果文件存放在其他路径,需要传入完整的文件路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:51:23