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
相关产品推荐
相关产品推荐

