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

else分支无法重复调用函数,报错'str' object not callable

解决'Str' Object Not Callable错误:函数与全局变量重名问题

嘿,你这明显是踩了个经典的命名冲突坑!问题出在你把函数名SchoolYear和全局变量名用了同一个名字——当你在函数内部执行global SchoolYear并把用户输入的字符串赋值给它时,原本的SchoolYear()函数就被覆盖成字符串类型了。之后你想在else分支里再次调用SchoolYear(),本质上是在调用一个字符串,这就触发了'str' object not callable的错误。

修正后的代码示例

只需要把全局变量名改成和函数名不一样的名称(遵循Python蛇形命名规范会更规范):

import os

def SchoolYear():
    os.system('clear')
    print('Please enter Which Year you are in School. EX.) 11th or Senior')
    print('')
    # 把全局变量名改成school_year,避免和函数名冲突
    global school_year
    school_year = input('Please enter the class: ')
    # 把合法值改成集合,转小写判断更简洁
    valid_years = {'9th', '10th', '11th', '12th', 'senior', 'freshman', 'sophomore', 'junior'}
    if school_year.lower() in valid_years:
        print('Good...')
    else:
        # 现在可以正常调用函数了,因为函数名没被覆盖
        print('Invalid input, please try again.')
        SchoolYear()

额外建议

  • 尽量遵循Python命名规范:函数和变量都用蛇形命名法(比如get_school_year()、school_year),避免使用 PascalCase 命名变量,减少这类冲突概率
  • 把合法输入值存成集合,配合lower()统一判断,能大幅减少重复的字符串判断代码,让逻辑更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:27:26