Python读取游戏高分txt文件时内容被清空的原因与修复方案
问题原因与修复方案
问题原因
- 文件打开模式错误:使用
w+模式打开文件时,会直接清空原有文件内容,导致程序启动后读取到的是空字符串,执行int(highscore)时就会触发invalid literal for int() with base 10:错误。 - 方法调用错误:Python的文件对象没有
replace()方法,代码里的hisc.replace(str(score))无法实现写入新高分的功能。
修复方案
修正思路
- 避免使用
w+模式,改用先读取(r模式)再写入(w模式)的分离逻辑,防止清空文件内容。 - 处理文件不存在的边界情况(首次运行时),避免报错。
- 读取文件内容时去除空白字符,防止换行、空格干扰整数转换。
修正后的代码
# 初始化最高分 highscore_in_no = 0 # 读取历史最高分 try: with open("snakeScore.txt", "r") as hisc: highscore = hisc.read().strip() if highscore: # 确保读取到有效内容 highscore_in_no = int(highscore) except FileNotFoundError: # 首次运行文件不存在时,创建文件并写入初始最高分 with open("snakeScore.txt", "w") as hisc: hisc.write(str(highscore_in_no)) # 更新最高分逻辑 if score > highscore_in_no: with open("snakeScore.txt", "w") as hisc: hisc.write(str(score)) highscore_in_no = score
关键修复点说明
- 使用
with语句管理文件:自动完成文件关闭操作,避免资源泄漏。 - 捕获
FileNotFoundError:处理首次运行无文件的场景,自动初始化文件内容。 - 读取时调用
strip():去除内容中的换行、空格等空白字符,确保整数转换正常。 - 分离读写操作:先读取历史数据,再根据比较结果决定是否写入新数据,彻底避免清空原有内容的问题。
内容的提问来源于stack exchange,提问作者duck2205
相关产品推荐
相关产品推荐

