Python程序提示执行成功但无法向txt文件写入内容的问题求助
文件写入失败问题排查及修复
问题根因
- 语法错误:Bat分支的
with open('GamePoints.txt, 'a+') as f:这行文件名缺少闭合单引号,GamePoints.txt后面漏写',正常运行到这里会直接抛出SyntaxError。如果你本地能跑到打印ok的步骤,先检查本地代码这里是不是贴代码时手滑漏写了引号。 - 冗余打开操作导致内容被覆盖/写入失败:两个分支里你都在
with块外单独写了open("GamePoints.txt","w")/open("GamePoints.txt","w+"):w/w+模式打开文件会直接清空全部原有内容- 这两个打开的文件对象你既没有写入内容,也没有调用
close()关闭,Windows系统下会直接锁定文件,导致后续with块的写入操作失败;就算在类Unix系统下,这两个未关闭的w模式句柄被垃圾回收时,会把空缓冲区内容刷入文件,直接覆盖你后面写入的字符串,这就是看不到写入内容的核心原因。
- 非功能性小问题:变量名
botting是拼写错误,正确写法为batting;import GameFile3写在函数内部不符合常规编码规范,建议移到文件顶部。
修复方案
直接删掉两个分支里多余的单独open调用,只用with上下文管理器操作文件即可,with会自动处理文件关闭、缓冲区刷新逻辑,不会出现内容丢失问题。如果你的逻辑是每次掷硬币结果确定后覆盖写入对应标识,直接用w模式即可,不需要用a+追加:
import time import random # 建议把GameFile3的import移到文件顶部,不要写在函数内部 class lostToss(): def botChoose(self): print("Bot is choosing between batting and bowling.") for dot in range(5): print((dot + 1) * ".") time.sleep(0.25) for _ in range(10): print("") choices = ['Bat', 'Bowl'] choose_res = random.choice(choices) print(f"And the bot has chose to {choose_res}") time.sleep(1) if choose_res == "Bat": with open('GamePoints.txt', 'w') as f: f.write('52L05yt0smdwPMA4wgdTUF7Yh4dLT') print('ok') time.sleep(10) import GameFile3 elif choose_res == "Bowl": with open('GamePoints.txt', 'w') as file: file.write('69L05yt0smdwPMA4wgdLOL7Yh4dLT') time.sleep(2) import GameFile3
如果你确实需要保留文件历史内容做追加写入,把
w改成a+即可,只要删掉前面冗余的open调用,就不会出现内容被覆盖的问题。
内容的提问来源于stack exchange,提问作者ScamperedC
相关产品推荐
相关产品推荐

