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

Python输入非y/n/m选项时报TypeError: 'str' object is not callable如何解决

问题排查与修复方案

错误根因

你遇到的报错核心是命名冲突:

  • 你定义的函数名为return_menu,但函数内部又将用户输入的字符串赋值给了同名变量return_menu
  • Python中函数本身也是可调用对象,当你在函数内给同名变量赋值后,原本的函数引用就被字符串类型的用户输入覆盖了
  • 输入符合要求的y/n/m时不会走到else分支,不会触发重新调用逻辑,因此不会报错;只有输入非法内容走到else分支,需要重新调用return_menu函数时,会把已经变成字符串的return_menu当做函数调用,就触发了TypeError: 'str' object is not callable错误

修复步骤

  1. 将函数内部存储用户输入的变量改名,避免和函数名冲突,比如改为user_choice
  2. 补全else分支的重新调用逻辑,确保输入非法后可以重新触发输入流程
  3. 可选优化:用循环替代递归实现重复输入,避免递归深度过高的潜在问题

修正后代码

def return_menu():
    console = Console()
    # 变量名改为user_choice,避免和函数名冲突
    user_choice = console.input("[bold cyan on magenta]Would like to search for another player(y/n) or return to the "
                                "Menu?(m):[/]  ")
    
    user_choice = user_choice.lower()

    if user_choice == "y":
        players_stats()
    elif user_choice == "m":
        menu()
    elif user_choice == "n":
        print("Good bye and Thank you for using our system!")
        exit()
    else:
        console.print("======================================================================", style="bold red")
        console.print("           Please choose the most appropriate option", style='bold red')
        console.print("======================================================================", style="bold red")
        # 正确调用函数重新输入
        return_menu()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:54:01