Python新手求助:调用calculate_temp(3)报'int' object is not subscriptable错误
解决'int' object is not subscriptable错误
嘿,完全不用不好意思!新手碰到这种问题太正常了,咱们一起捋清楚怎么回事~
首先,'int' object is not subscriptable这个报错的意思很直白:你试着用下标(比如x[0]这种写法)去访问一个整数,但整数根本没有下标可以取,Python当然要报错啦。
结合你说的两个函数功能,问题肯定出在calculate_temp()里——你说它要和范围列表对比,那这个列表里的每个元素应该是类似[最小值, 最大值, 对应分数]这种能取下标的结构,但大概率你不小心把某个整数当成了这种结构来用下标访问,或者你的范围列表里混进了单个整数,甚至调用in_range()时传参搞错了。
举个例子,假设你原本的代码可能是这样的(错误版):
def in_range(value, range_min, range_max): return range_min <= value <= range_max def calculate_temp(value): # 这里错把范围列表写成了单个整数的集合,每个元素不是范围+分数的组合 temp_ranges = [1, 3, 5] for temp_range in temp_ranges: # 这里想取temp_range[0],但temp_range是整数1,自然报错 if in_range(value, temp_range[0], temp_range[1]): return temp_range[2]
当你调用calculate_temp(3)时,循环到第一个元素1,执行temp_range[0]就触发了那个错误——整数可没法用下标访问呀!
修正后的示例代码
咱们把范围列表改成每个元素都是包含范围和分数的元组或列表就行,比如:
def in_range(value, range_min, range_max): return range_min <= value <= range_max def calculate_temp(value): # 每个元素是(下限, 上限, 对应分数)的元组 temp_ranges = [ (0, 2, 10), (2, 4, 20), (4, 6, 30) ] for temp_range in temp_ranges: # 现在temp_range是元组,能正常取下标 if in_range(value, temp_range[0], temp_range[1]): return temp_range[2] # 处理值不在任何范围的情况,返回默认分数 return 0 print(calculate_temp(3)) # 现在会返回20,完美运行~
你可以自查这几点
对照自己的代码检查一下:
calculate_temp()里的范围列表,每个元素是不是元组/列表(能取下标的结构),而不是单个整数- 调用
in_range()时,有没有把单个整数当成范围参数传进去(比如不小心写了temp_range而不是temp_range[0]) - 有没有在其他地方误把整数当成列表/元组来用下标访问
这样应该就能搞定这个错误啦!
内容的提问来源于stack exchange,提问作者winternet
相关产品推荐
相关产品推荐

