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

为什么调用readline()读取文件内容无法成功追加到列表中?

代码问题与修复方案

现有代码的错误点

  • 混用文件对象遍历和readline()方法:for stock in Apple_stock本身就会逐行读取文件内容并赋值给stock变量,循环内再调用Apple_stock.readline()会直接跳转到下一行,相当于每次循环消耗两行内容,仅保留第二行的处理结果,文件行数较少时就会出现列表为空的情况。
  • return语句位置错误:return Apple_data写在了print(Apple_data)前面,函数执行到return就会直接退出,后续的print语句永远不会执行,无法看到打印结果。
  • 函数参数冗余:定义的函数参数Apple_stock被函数内部第一行的赋值操作覆盖,传入的参数完全未被使用,最初出现的AttributeError是更早版本的代码缺少Apple_stock = open("ApplePrices.txt", "r")这行,直接将外部传入的列表类型参数当成文件对象调用readline()导致的。
  • 局部变量访问错误:Apple_data是函数内部定义的局部变量,函数外无法直接访问该变量,必须接收函数返回值才能拿到读取结果,未正确接收返回值也会导致看起来列表为空。

修复后代码

基础修复版本(保留原有写法习惯)

# 移除冗余的参数定义
def read_file():
    Apple_stock = open("ApplePrices.txt", "r")
    Apple_data = []
    
    for stock in Apple_stock:
        # 直接处理遍历得到的行内容,不需要额外调用readline
        stock = stock.rstrip('\n')
        Apple_data.append(stock)
    Apple_stock.close()
    # print调整到return语句前才能正常执行
    print(Apple_data)
    return Apple_data

# 调用函数并接收返回值,才能拿到读取到的列表内容
result = read_file()
print(result)

优化版本(使用with上下文管理器自动管理文件关闭,避免资源泄露)

def read_file():
    Apple_data = []
    # 新增encoding参数避免不同系统编码兼容问题
    with open("ApplePrices.txt", "r", encoding="utf-8") as f:
        for line in f:
            Apple_data.append(line.rstrip('\n'))
    print(Apple_data)
    return Apple_data

result = read_file()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:27:01