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

LPTHW练习16文件读写脚本报错求助:AttributeError问题

问题分析与解决方法

嘿,这个错误其实是新手操作文件时很常见的小问题,我给你一步步拆解清楚:

为什么会出现这个错误?

AttributeError: 'NoneType' object has no attribute 'read' 这句话的意思是:你试图调用read()方法的变量abb,它的值是None(空值),而None是没有read()方法的。

那abb为什么会变成None呢?大概率是你在之前的代码里,把abb赋值给了一个返回None的操作,比如:

  • 你可能写了 abb = open('notepad.txt', 'w').write(输入内容) —— 因为write()方法返回的是写入的字符数,不是文件对象,写完后文件还会自动关闭,所以abb最后不是可用的文件对象;
  • 或者你写了 abb = open('notepad.txt').close() —— close()方法本身就返回None,所以abb直接变成了空值;
  • 还有一种可能:你用同一个文件对象先做了写操作('w'模式),之后没重新打开就直接读,但写模式下的文件对象是不能读的,而且操作完如果没处理好,对象可能已经失效了。

正确的实现步骤与代码示例

我们按照你要实现的三个功能,一步步写正确的代码,推荐用with语句(它会自动帮你关闭文件,避免手动关文件的麻烦):

1. 读取并打印原文件内容

# 以读模式打开文件,with块结束自动关闭
with open('notepad.txt', 'r') as original_file:
    original_content = original_file.read()
    print("原文件内容:")
    print(original_content)

2. 清空文件并写入两行用户输入

# 获取用户输入
first_line = input("请输入第一行内容:")
second_line = input("请输入第二行内容:")

# 以写模式打开文件('w'模式会直接清空原文件内容)
with open('notepad.txt', 'w') as write_file:
    write_file.write(first_line + "\n")  # 加换行符让内容分行
    write_file.write(second_line + "\n")

3. 打印新的文件内容

# 重新以读模式打开文件,读取新内容
with open('notepad.txt', 'r') as new_file:
    new_content = new_file.read()
    print("\n更新后的文件内容:")
    print(new_content)

额外小提示

  • 每次对文件做不同操作(读/写)时,尽量重新打开文件,或者确保文件对象处于对应的模式;
  • 用with语句是Python中处理文件的最佳实践,能避免很多“忘记关文件”“文件对象失效”的问题;
  • 另外,我知道你清楚LPTHW不是所有人眼中的最佳入门书,但既然你选了它跟着练,那就坚持下去——这类基础的文件操作问题,正是帮你理解Python资源管理的好机会~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:51:19