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

Python布尔值保存后加载异常:bool()转换始终返回True求助

解决Python布尔值保存与加载时的转换问题

问题出在bool()函数的工作逻辑上:在Python中,任何非空字符串传入bool()都会返回True,不管字符串内容是"True"还是"False"。你保存时把布尔值转成了字符串形式,读取后直接用bool()转换,自然会得到始终为True的结果。

修复方案

有两种简单可靠的修复方式:

方式1:字符串匹配直接转换

读取到字符串后,通过判断内容是否等于"True"来赋值布尔值:

testbool = loaded_list[0] == "True"

方式2:用ast.literal_eval()解析原类型

如果以后要保存更多复杂类型(比如数字、列表),这种方法扩展性更好,它能安全地把字符串解析回原Python对象:

import ast
testbool = ast.literal_eval(loaded_list[0])

修改后的完整代码

同时优化了文件操作(用with语句自动关闭文件,避免资源泄漏),并避免使用Python内置关键字list作为变量名:

menu = True
testbool = False

def save():
    with open("testsave.txt", "w") as f:
        save_list = [str(testbool)]
        for item in save_list:
            f.write(item)
    print(testbool)

while menu:
    ans = input("Hello 1 or 2?\n")
    if str(ans) == "1":
        print("Hello World!!")
        save()
        menu = False
        run = True
    if str(ans) == "2":
        print(testbool)
        with open("testsave.txt", "r") as f:
            loaded_list = [line.rstrip('\n') for line in f.readlines()]
        print(testbool)
        # 这里替换成方式1的代码
        testbool = loaded_list[0] == "True"
        # 或者用方式2:先import ast,再用下面的代码
        # testbool = ast.literal_eval(loaded_list[0])
        print(testbool)
        if ans == "4":
            quit()
        menu = False
        run = True

while run:
    print("Hello World")
    save()
    ans = input("4?")
    if ans == "4":
        quit()

额外说明

  • 用with语句处理文件是Python的最佳实践,它会在代码块结束后自动关闭文件,不需要手动调用close()
  • 避免使用list、str这类Python内置类型名作为变量名,会覆盖内置功能导致潜在问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:04:58