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
相关产品推荐
相关产品推荐

