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

Python脚本循环调用函数时报错'str' object is not callable及变量管理求助

解决你的Python脚本错误与变量管理问题

咱们一步步来解决你遇到的两个问题,先搞定那个烦人的'str' object is not callable错误:

一、修复'str' object is not callable错误

这个错误的根源特别直接——你在main()函数里不小心把函数名main当成普通变量用了:

main = input("")

执行这行代码后,原本指向main()函数的标识符被覆盖成了用户输入的字符串。之后你递归调用main()时,其实是在尝试调用一个字符串,这肯定会报错啊!

修复方法:把这个变量名改成别的,比如user_choice,避免和函数名冲突:

def main():
    global DNA
    global Smartness
    global cases
    global deaths
    global recovered
    print("Do your actions: ")
    # 把变量名从main改成user_choice,避免覆盖函数引用
    user_choice = input("")
    if user_choice == "1":
        cases()
        print("")
        main()
    elif user_choice == "2":
        deaths()
        print("")
        main()
    elif user_choice == "3":
        recovered()
        print("")
        main()
    elif user_choice == "4":
        DNA()
        print("")
        main()
    elif user_choice == "5":
        Smartness()
        print("")
        main()
    else:
        print("Only chose a number between 1 and 5!")
        main()

二、管理变量让记事本可以访问

要让变量能被记事本读取,本质就是把变量值保存到文本文件里。这里给你两种简单实用的方案:

方案1:普通文本文件存储(简单直观)

写一个函数,把需要保存的变量按变量名: 值的格式写入txt文件,记事本直接就能打开查看:

def save_vars_to_txt():
    # 把所有需要保存的变量放进字典,方便批量处理
    vars_to_save = {
        "China_3": China_3,
        "India_3": India_3,
        "USA_3": USA_3,
        "DNA": DNA,
        "Smartness": Smartness,
        # 把你需要的其他变量都加进来
    }
    # 写入文件,覆盖旧内容
    with open("virus_data.txt", "w", encoding="utf-8") as f:
        for var_name, var_value in vars_to_save.items():
            f.write(f"{var_name}: {var_value}\n")

你可以在每次修改变量后,或者程序结束前调用这个函数,生成的virus_data.txt用记事本打开就能看到所有变量的内容。

方案2:JSON格式存储(结构清晰)

JSON是结构化的存储格式,排版整齐,记事本打开也一目了然,而且后续如果需要读取变量回来继续用也更方便:

import json

def save_vars_to_json():
    vars_to_save = {
        "China_3": China_3,
        "India_3": India_3,
        "USA_3": USA_3,
        "DNA": DNA,
        "Smartness": Smartness,
        # 其他需要保存的变量...
    }
    # 写入JSON文件,indent=4让格式更美观
    with open("virus_data.json", "w", encoding="utf-8") as f:
        json.dump(vars_to_save, f, indent=4)

如果之后要从文件里加载变量,也可以写个读取函数:

def load_vars_from_json():
    global China_3, India_3, USA_3, DNA, Smartness
    with open("virus_data.json", "r", encoding="utf-8") as f:
        saved_vars = json.load(f)
    # 把加载的变量赋值给全局变量
    China_3 = saved_vars["China_3"]
    India_3 = saved_vars["India_3"]
    USA_3 = saved_vars["USA_3"]
    DNA = saved_vars["DNA"]
    Smartness = saved_vars["Smartness"]
    # 其他变量依次赋值

另外提醒一句:你在recovered()函数里用到的China_3、India_3这些变量,最好也在函数里用global声明,或者考虑把所有变量放进一个类里管理,这样能避免很多变量未定义的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:42:46