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错误
修复步骤
- 将函数内部存储用户输入的变量改名,避免和函数名冲突,比如改为
user_choice - 补全else分支的重新调用逻辑,确保输入非法后可以重新触发输入流程
- 可选优化:用循环替代递归实现重复输入,避免递归深度过高的潜在问题
修正后代码
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
相关产品推荐
相关产品推荐

