如何解决Python中学生类方法引发的‘TypeError: tuple indices must be integers or slices’错误?
搞定这个TypeError的小技巧
嘿,看你的报错信息builtins.TypeError: tuple indices must be integers or slices, not student,问题其实出在你写getTheFirstInClass方法时,没处理好类方法的第一个参数self,导致把实例对象当成成绩列表来索引了。
为啥会报错?
当你用std1.getTheFirstInClass(2.4,4.2,5.6,2.2,1.2)调用方法时,Python会自动把std1这个Student实例作为第一个参数传给方法。如果你定义方法时没写self当第一个参数,那你写的grades参数实际接收到的是std1对象,而不是你传入的成绩!这时候你在方法里循环grades并尝试用整数索引,自然会报错——Student对象可不能用整数当索引呀。
比如你可能写了这样的错误方法:
# 错误示例! def getTheFirstInClass(grades): maxValue = grades[0] for i in range(len(grades)): if grades[i] > maxValue: maxValue = grades[i] return maxValue
修正后的完整代码
我给你改好了整个Student类,你可以直接用:
class Student: def __init__(self, name, age): self.name = name self.age = age # 标准的getter和setter def get_name(self): return self.name def set_name(self, new_name): self.name = new_name def get_age(self): return self.age def set_age(self, new_age): if isinstance(new_age, int) and new_age > 0: self.age = new_age else: print("年龄必须是正整数哦") def getTheFirstInClass(self, *grades): # 先判断有没有传入成绩,避免空列表报错 if not grades: print("请传入成绩哦") return None # 初始化最高分 max_score = grades[0] # 直接遍历成绩,比用索引更安全简洁 for score in grades: if score > max_score: max_score = score return max_score # 测试一下 std1 = Student("小明", 16) top_score = std1.getTheFirstInClass(2.4, 4.2, 5.6, 2.2, 1.2) print(f"班级最高分是:{top_score}") # 输出5.6
几个关键要点
- 类方法必须带
self:这是Python类的规则,self代表当前实例对象,调用时Python会自动传,不用你手动写; - 用
*grades接收多个参数:这样你可以直接传入多个成绩值,Python会把它们打包成元组,方便遍历; - 避免用索引循环:直接遍历
grades里的每个成绩,既简洁又不会因为索引类型出错; - 增加边界判断:比如没有传入成绩的情况,避免程序崩溃。
内容的提问来源于stack exchange,提问作者Pyt Leb
相关产品推荐
相关产品推荐

