Python程序读取文本文件时无法读取新行且触发AttributeError异常
问题分析与解决:文件对象被覆盖导致的AttributeError
嘿,这个报错的根源其实一眼就能看穿——你不小心把文件对象给覆盖了!
看你代码里else分支的这行:
f = Furgone(cod, tipo, targa, categoria, posti, modello, marca)
原本f是指向打开的文件对象的,结果你把它重新赋值成了Furgone类的实例。这就导致后面再执行line = f.readline().strip()时,你是在调用一个自定义类对象的readline方法,而你的Furgone类根本没实现这个方法,自然就抛出了AttributeError。
修正方案
把Furgone实例的变量名改成别的,别再用f占用文件对象的变量就行:
else: categoria = line line = f.readline().strip() posti = int(line) line = f.readline().strip() modello = line line = f.readline().strip() marca = line # 换个变量名,比如furgone,避免覆盖文件对象 furgone = Furgone(cod, tipo, targa, categoria, posti, modello, marca) line = f.readline().strip() Veicoli.append(furgone)
额外优化小建议
- 推荐用
with语句管理文件,它会自动帮你关闭文件,避免忘记手动close或者异常时无法关闭的问题:
with open("veicoli.txt", "r") as f: # 这里写读取文件的逻辑,无需手动调用f.close()
- 当前逐行读取的逻辑有点繁琐,也容易出错,可以试试用迭代器遍历文件行,比如
for line in f:,能减少重复调用readline带来的混乱。
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

